Текущий раздел:

Описания RDS

Описание пользователя

Глава 3. Использование стандартных модулей автокомпиляции

§3.7. Краткий перечень вводимых в модель описаний и реакций на события

§3.7.8. Реакции окна подсистемы

§3.7.8.1. Действия с окном подсистемы

# Описание пользователя

## Глава 3. Использование стандартных модулей автокомпиляции

### §3.7. Краткий перечень вводимых в модель описаний и реакций на события

#### §3.7.8. Реакции окна подсистемы

Рассматриваются реакции на события, связанные с окнами подсистем.

##### §3.7.8.1. Действия с окном подсистемы

Это событие возникает в подсистеме и во всех блоках, находящихся непосредственно внутри нее, при открытии и закрытии окна этой подсистемы. Блоки, находящиеся внутри подсистем этой подсистемы (то есть блоки, не имеющие отношения к открытому или закрытому окну), информации об этом событии не получают. Реакцию на него можно использовать, например, для того, чтобы, зная дескриптор только что открытого окна подсистемы, выполнить с ним какие-либо нестандартные действия. Текст этой реакции вводится на вкладке «события» левой панели редактора модели: раздел «реакции подсистемы», подраздел «действия с окном подсистемы».

В классе блока для события действий с окном подсистемы создается функция с именем rdsbcppSysWinOperation следующего вида:

      // Subsystem window actions
      void rdsbcppBlockClass::rdsbcppSysWinOperation(
                                RDS_PWINOPERATIONDATA OperationData)
      {
         … пользовательский текст реакции …
      }

Параметр функции OperationData – это указатель на структуру описания события RDS_WINOPERATIONDATA:

      typedef struct {
        int Operation;   // Операция с окном
        HWND Handle;     // Дескриптор окна
        BOOL EditMode;   // Включен режим редактирования
        BOOL Running;    // Идет расчет
        BOOL OwnWindow;  // Операция с окном данной подсистемы
      } RDS_WINOPERATIONDATA;
      typedef RDS_WINOPERATIONDATA *RDS_PWINOPERATIONDATA;

Поля структуры имеют следующий смысл:

Operation(int)
  Константа RDS_SWO_OPEN, если окно открылось, и RDS_SWO_CLOSE, если оно закрылось.
Handle(HWND)
  Дескриптор окна подсистемы (его можно использовать в вызовах Windows API).
EditMode(BOOL)
  TRUE, если RDS находится в режиме редактирования, и FALSE в противном случае (для режимов моделирования и расчета).
Running(BOOL)
  TRUE, если RDS находится в режиме расчета (то есть работает поток расчета), и FALSE в противном случае (для режимов редактирования и моделирования).
OwnWindow(BOOL)
  TRUE, если было открыто или закрыто окно подсистемы, модель которой вызывается (автокомпилируемые модели подсистем используются крайне редко), и FALSE, если открыто или закрыто окно подсистемы, родительской по отношению к вызываемому блоку.

При написании моделей блоков без использования модуля автокомпиляции действиям с окном подсистемы соответствует константа RDS RDS_BFM_WINDOWOPERATION.