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

Описания RDS

Приложения

Приложение А. Функции, константы и структуры RDS

А.5. Сервисные функции и макросы RDS

А.5.8. Работа с окнами подсистем

А.5.8.4. rdsEnableWindowRefresh – разрешение/запрет обновления окон

# Приложения

## Приложение А. Функции, константы и структуры RDS

### А.5. Сервисные функции и макросы RDS

#### А.5.8. Работа с окнами подсистем

##### А.5.8.4. rdsEnableWindowRefresh – разрешение/запрет обновления окон

Функция rdsEnableWindowRefresh разрешает или запрещает обновление окна указанной подсистемы или немодальных окон указанного блока в режимах моделирования и расчета.

      void RDSCALL rdsEnableWindowRefresh(
        RDS_BHANDLE Block,    // Блок или подсистема
        BOOL Enable,          // Разрешить/запретить обновление
        BOOL Recurse          // Включать вложенные блоки
      );

Тип указателя на эту функцию

RDS_VBhBB

Параметры

Block(RDS_BHANDLE)
  Идентификатор блока, обновление немодальных окон которого нужно разрешить или запретить. Если Block – подсистема, в ее немодальные окна входит и само окно подсистемы (за редким исключением, это – единственное окно, которым владеет подсистема).
Enable(BOOL)
  TRUE, если обновление окон нужно разрешить, или FALSE, если его необходимо временно запретить.
Recurse(BOOL)
  Если Block – подсистема, значение TRUE в этом параметре также разрешит или запретит (в зависимости от значения Enable) обновление немодальных окон всех блоков этой подсистемы на всех уровнях иерархии (в частности, всех окон вложенных подсистем).

Примечания

Эта функция обычно используется для временного запрета обновления окон в режиме расчета, если какие-либо вычисления занимают несколько тактов и в середине этих вычислений, пока их результаты не готовы, отображать что-либо в окнах нежелательно. В режиме редактирования обновление окон всегда разрешено, и вызов этой функции игнорируется.

При запрещении обновления окон в параметрах блока Block взводится флаг RDS_NOWINREFRESH. При этом обновление окна подсистемы (если Block – подсистема) запрещается автоматически, а для всех остальных немодальных окон, принадлежащих блоку Block, если таковые имеются, анализировать состояние этого флага необходимо вручную. Например, функция немодального окна, открытого средствами Windows API, не должно перерисовывать содержимое окна при получении сообщения WM_PAINT или при вызове сервисной функции rdsRefreshBlockWindows, если флаг RDS_NOWINREFRESH взведен.

Если при запрещенном обновлении окон (взведенном флаге RDS_NOWINREFRESH) будет затребовано обновление окна, в флагах структуры RDS_BLOCKDATA блока, которому принадлежит окно, должен быть взведен флаг RDS_WINREFRESHWAITING (для окон подсистем и в результате вызова rdsRefreshBlockWindows это делается автоматически, во всех остальных случаях этим должна заниматься модель блока). Когда обновление окон данного блока будет снова разрешено (флаг RDS_NOWINREFRESH сброшен), если флаг RDS_WINREFRESHWAITING окажется взведенным, для блока будет автоматически вызвана функция rdsRefreshBlockWindows.

Таким образом, состояние флагов RDS_NOWINREFRESH и RDS_WINREFRESHWAITING описывает ситуацию с обновлением окон блока следующим образом:

RDS_NOWINREFRESH | RDS_WINREFRESHWAITING | Состояние блока
--- | --- | ---
0 | 0 | Обновление окон разрешено.
0 | 1 | Обновление окон разрешено, но, пока оно было запрещено, произошли какие-то изменения, и их нужно отобразить.
1 | 0 | Обновление окон запрещено.
1 | 1 | Обновление окон запрещено, требуется отобразить изменения при первой возможности.

Если вызовом rdsEnableWindowRefresh разрешается или запрещается обновление окон подсистемы, модели блока не нужно следить за флагами RDS_NOWINREFRESH и RDS_WINREFRESHWAITING – все действия по прекращению и возобновлению обновления этих окон будут выполнены автоматически.

Следует учитывать, что у функции rdsEnableWindowRefresh нет внутреннего счетчика вызовов, поэтому если вызвать ее для запрещения обновления (с параметром Enable, равным FALSE) несколько раз, все вызовы кроме первого будут проигнорированы, и обновление будет снова разрешено при первом же вызове функции с параметром Enable=TRUE.

См. также

rdsRefreshBlockWindows, RDS_BLOCKDATA.