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

Описания RDS

Приложения

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

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

А.5.31. Вспомогательный объект для панелей в окне подсистемы

А.5.31.1. rdsPANCreate – создать объект для работы с панелью

# Приложения

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

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

#### А.5.31. Вспомогательный объект для панелей в окне подсистемы

Описываются функции и команды вспомогательного объекта RDS, предназначенного для создания внутри окна подсистемы независимых панелей, являющихся самостоятельными оконными объектами Windows.

##### А.5.31.1. rdsPANCreate – создать объект для работы с панелью

Функция rdsPANCreate создает вспомогательный объект RDS, позволяющий модели блока открывать в окне родительской подсистемы этого блока независимо перемещаемую панель с произвольным содержимым.

      RDS_HOBJECT RDSCALL rdsPANCreateA(
        int Order,            // Близость к переднему плану
        int Left,int Top,     // Левый верхний угол
        int Width,int Height, // Размеры
        int Flags,            // Флаги (RDS_PAN_F_*)
        RDSCSTR Caption       // Заголовок или NULL (UTF8)
      );
      RDS_HOBJECT RDSCALL rdsPANCreateW(
        int Order,            // Близость к переднему плану
        int Left,int Top,     // Левый верхний угол
        int Width,int Height, // Размеры
        int Flags,            // Флаги (RDS_PAN_F_*)
        RDSWCSTR Caption      // Заголовок или NULL (UTF16)
      );
      // Функция-псевдоним
      RDS_HOBJECT RDSCALL rdsPANCreate(
        int Order,            // Близость к переднему плану
        int Left,int Top,     // Левый верхний угол
        int Width,int Height, // Размеры
        int Flags,            // Флаги (RDS_PAN_F_*)
        RDSXCSTR Caption      // Заголовок или NULL (кодировка по умолчанию)
      );

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

RDS_HoIIIIIIS (для UTF8) или RDS_HoIIIIIIWs (для UTF16)

Параметры

Order(int)
  Целое число, определяющее близость панели к переднему плану (панели одного и того же блока с большим значением Order будут перекрывать панели с меньшим значением, перекрытие панелей разных блоков определяется взаимным расположением самих блоков).
Left, Top(int)
  Координаты левого верхнего угла (Left – горизонтальная, Top – вертикальная) панели в окне подсистемы в точках экрана в масштабе 100%.
Width, Height(int)
  Ширина (Width) и высота (Height) панели в точках экрана в масштабе 100%.
Flags(int) }
  Набор битовых флагов, определяющих поведение и внешний вид панели:

  RDS_PAN_F_BORDER | Панель имеет рельефную рамку.
  RDS_PAN_F_CAPTION | У панели есть полоса заголовка в стиле окон Windows (только вместе с флагом RDS_PAN_F_BORDER).
  RDS_PAN_F_HIDDEN | Панель создается невидимой. Видимость панели можно включить позже командой RDS_PAN_VISIBLE.
  RDS_PAN_F_MOVEABLE | Пользователь может перемещать панель, перетаскивая ее мышью за заголовок (только вместе с флагом RDS_PAN_F_CAPTION).
  RDS_PAN_F_NOBUTTON | В полосе заголовки панели нет кнопки закрытия (только вместе с флагом RDS_PAN_F_CAPTION). По умолчанию эта кнопка есть, и нажатие на нее скрывает панель.
  RDS_PAN_F_PAINTMSG | Блок, модель которого создала панель, получает сообщения о необходимости перерисовать ее.
  RDS_PAN_F_SCALABLE | Панель меняет свои размеры вместе с масштабом подсистемы.
  RDS_PAN_F_SIZEABLE | Пользователь может изменять размеры панели, перетаскивая углы и стороны ее рамки (только вместе с флагом RDS_PAN_F_BORDER).

Caption(RDSCSTR,RDSWCSTR,RDSXCSTR)
  Указатель на строку, которая будет отображаться в полосе заголовка панели, или NULL, если панели не нужен текстовый заголовок.

Возвращаемое значение

Уникальный идентификатор созданного объекта (RDS_HOBJECT).

Примечания

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

При создании объекта указываются координаты и размеры панели, ее близость к переднему плану и заголовок. Все эти параметры, кроме близости к переднему плану, могут быть позже изменены соответствующими командами.

Работа с панелями подробно описана в §2.10.4 руководства программиста. Как правило, взаимодействие модели блока с объектом панели строится по следующему сценарию:

- вспомогательный объект создается функцией rdsPANCreate, при этом, если окно родительской подсистемы вызвавшего блока закрыто или при создании был указан флаг RDS_PAN_F_HIDDEN, сама панель не создается;
- как только окно подсистемы блока будет открыто (или как только видимость панели будет включена), RDS создаст внутри окна панель и уведомит об этом модель блока, передав ей дескриптор оконного объекта созданной панели типа HWND в параметрах события RDS_BFM_BLOCKPANEL;
- реагируя на уведомление о создании панели, модель блока размещает в ней поля ввода или другие объекты Windows;
- пока панель видима и окно подсистемы открыто, RDS уведомляет модель блока о перемещениях панели, изменении ее размера и необходимости перерисовки (если задан флаг RDS_PAN_F_PAINTMSG) при помощи все того же события RDS_BFM_BLOCKPANEL;
- при закрытии окна подсистемы или скрытии панели RDS уведомит об этом модель блока, которая должна уничтожить все объекты Windows, созданные ей внутри панели, затем уничтожит оконный объект панели и будет ждать следующего открытия окна, чтобы снова создать в нем панель;
- когда панель перестанет быть нужна модели, модель удалит вспомогательный объект функцией rdsDeleteObject, при этом, если панель, связанная с этим объектом, была видима, перед уничтожением объекта она закроется автоматически (с уведомлением об этом модели блока).

Чаще всего панели используются для размещения в окнах подсистемы дополнительных объектов, не относящихся к RDS: стандартных полей ввода, областей вывода внешних библиотек и т.п.

Пример

В §2.10.4 руководства программиста приводится пример построения на панели трехмерного изображения средствами библиотеки OpenGL.

См. также

Вспомогательные объекты, rdsDeleteObject, RDS_BFM_BLOCKPANEL.