Главная » Win32 API » Оконные сообщения и функции работы с окнами

0

Окно это не только область на экране, посредством которой при­ложение может представить свой вывод, это еще и адресат событий и сообщений в среде Windows.

Окно идентифицируется по дескриптору окна. Этот дескриптор (переменная типа HWND) однозначно определяет каждое окно в сис­теме. Windows организует свои окна в иерархическую структуру:

-   каждое окно имеет родителя, корнем дерева всех окон является окно рабочего стола, создаваемого Windows при загрузке;

-   для всех окон верхнего уровня (для главных окон приложений и других перекрывающихся и всплывающих окон приложений) роди­тельским окном является рабочий стол.

Родитель дочернего окна окно верхнего уровня или другое до­чернее окно, более высокого уровня по иерархии.

Между окнами верхнего уровня (перекрывающиеся и всплываю­щие окна) существует еще одна иерархическая связь. Владельцем окна верхнего уровня может быть другое окно того же уровня. Окно, имеющее владельца, всегда отображается поверх своего владельца и исчезает при минимизации окна-владельца. Типичным случаем владе­ния одного окна верхнего уровня другим является приложение, ото­бражающее диалоговое окно. Диалоговое окно не является дочерним окном (оно является всплывающим окном), но его владельцем остается окно приложения.

Окно, как правило, реагирует на множество сообщений. Рассмот­рим наиболее часто обрабатываемые сообщения:

-  WMCREATE посылается окну перед тем, как окно станет ви­димым, при получении сообщения приложение может инициализиро­вать нужные данные;

-  WMDESTROY посылается окну, которое уже удалено с экрана и должно быть разрушено;

-  WMCLOSE указывает, что окно должно быть закрыто. Прило­жение может при его обработке, например, вывести диалоговое окно подтверждения закрытия окна;

-  WMQUIT сообщение, требующее завершить приложение;

-  WMQUERYENDSESSION уведомляет приложение о намере­нии Windows закончить сеанс. Приложение может возвратить значе­ние FALSE в ответе на это сообщение, предотвратив этим выключение Windows. После обработки сообщения WMQUERYENDSESSION Windows посылает всем приложениям сообщение WMENDSESSION с результатами этой обработки;

-  WMENDSESSION посылается приложениям после обработки сообщения WMQUERYENDSESSION. Оно указывает, должна ли Windows выключиться, или выключение отложено. При указании вы­ключения сеанс Windows может закончиться в любое время после об­работки сообщения WMENDSESSION всеми приложениями. Поэто­му важно, чтобы приложения выполнили все задачи по обеспечению безопасного завершения работы;

-  WMACTIVATE указывает, что окно верхнего уровня будет ак­тивизировано или деактивизировано. Сообщение сначала посылается окну, которое должно быть деактивизировано, а потом окну, которое должно быть активизировано;

-  WMSHOWWINDOW указывает, что окно должно быть скрыто или отображено;

-  WMENABLE посылается окну, когда оно становится доступ­ным или недоступным. Недоступное окно не может принимать вводи­мые данные от мыши или клавиатуры;

-  WMMOVE указывает, что расположение окна изменилось;

-  WMSIZE указывает, что размер окна был изменен;

-  WMSETFOCUS указывает получение окном фокуса клавиату­ры;

-  WMKILLFOCUS указывает, что окно должно потерять фокус клавиатуры;

Рассмотрим функции, позволяющие приложению исследовать ие­рархию окон, находить, перемещать, изменять режим отображения, изменять вид окна:

AnimateWindow дает возможность производить специальные эффекты при показе или сокрытии окон. Имеются четыре типа мультип­ликации: ролик, слайд, свертывание или развертывание и плавное пе­ретекание;

CloseWindow свертывает (но не разрушает) определенное окно;

FindWindow используется для поиска окна верхнего уровня по имени его класса окна или по заголовку окна;

FlashWindow предназначена для создания окна с мигающим за­головком, используется для привлечения внимания к окну;

FlashWindowEx усовершенствованный вариант FlashWindow;

GetClientRect возвращает координаты клиентской области окна;

GetParent возвращает дескриптор родительского окна для ука­занного;

GetDesktopWindow возвращает дескриптор окна рабочего стола Windows;

GetTitleBarlnfo возвращает информацию о строке заголовка;

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

GetWindowPlacement возвращает данные о расположении окна;

GetWindowTextLength возвращает длину (количество символов) текста строки заголовка для окна, если окно имеет область заголовка. Если окно элемент управления, функция возвращает длину текста внутри элемента управления.

IsChild проверяет, является ли окно дочерним окном или порож­денным окном для указанного родительского окна;

IsWindow определяет, соответствует ли заданный дескриптор существующему окну;

IsWindowVisible возвращает информацию о состоянии заданно­го окна;

MoveWindow изменяет расположение и размеры окна. Для окна верхнего уровня расположение вьгаисляется относительно левого верхнего угла экрана. Для дочернего окна расположение вьгаисляется относительно левого верхнего угла клиентской области родительского окна;

Openlcon восстанавливает свернутое окно;

SetWindowPlacement устанавливает в состояние показа и восста­навливает, свертывает и развертывает окно;

SetWindowText копирует текст строки заголовка окна (если оно имеет ее) в буфер. Если окно элемент управления, текст элемента управления копируется;

ShowWindow устанавливает состояние показа окна; WindowFromPoint отыскивает дескриптор окна, которое содер­жит заданную точку.

Источник: Сучкова, Л.И. Win32 API: основы программирования: учебное пособие/ Л.И. Сучкова; АлтГТУ им. ИИ. Ползунова. -Барнаул, АлтГТУ, 2010. 138 с, ил.

По теме:

  • Комментарии