Приложения
Приложение А. Функции, константы и структуры 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.