ЛЕКЦИЯ #7 - ОКНА в ОС WINDOWS
Окно в Windows можно определить как прямоугольную область на экране. Однако это определение в своей простоте скрывает множество функциональных возможностей под абстрактной идеей окна как основной единицы взаимодействия пользователя и Windows-приложения.
Окно — это не только область на экране, посредством которой приложение может представить свой вывод, это еще и адресат событий и сообщений в среде Windows. Хотя понятие окна в Windows опередило использование объектно-ориентированных языков на несколько лет, но их терминология более чем соответствует: свойства окна определяют его внешний вид, а методы определяют его реакцию на ввод пользователя и другие системные события.
Окно идентифицируется по дескриптору окна. Этот дескриптор (обычно — переменная типаHWND) однозначно определяет каждое окно в системе. Их список содержит очевидные окна приложений и диалоговые окна, а также менее очевидные, такие, как рабочий стол, пиктограммы или кнопки. События пользовательского интерфейса объединяются с дескриптором соответствующего окна, образуя сообщение Windows, и посылаются или помещаются в очередь приложения (точнее, потока), который владеет этим окном.
Не нужно говорить, что Windows предоставляет множество функций по созданию и управлению окнами.
Иерархия окон
Windows организует свои окна в иерархическую структуру. Каждое окно имеет родителя и ни одного или несколько элементов одного уровня. Корнем дерева всех окон является окно рабочего стола, создаваемое Windows при загрузке. Родительским окном для окон верхнего уровня является рабочий стол; для дочернего окна — окно верхнего уровня или другое дочерне окно, более высокого уровня по иерархии.
В действительности ситуация в Windows NT более сложна. В отличие от своей более простой родственницы, Windows NT может управлять несколькими рабочими столами одновременно. Windows NT обычно работает с тремя рабочими столами: один — для экрана начала сеанса (Winlogon), один — для пользовательских приложений и один — для хранителя экрана.
Видимая иерархия окон обычно отражает логическую иерархию. Окна одного уровня иерархии обычно отображаются в Z-порядке, который влияет на порядок появления окон одного уровня. Однако этот порядок может измениться для окон верхнего уровня. Окна верхнего уровня со стилем окнаWS_EX_TOPMOST отображаются поверх всех остальных окон верхнего уровня без этого стиля.
Существует еще одна связь между окнами верхнего уровня. Владельцем такого окна может быть другое окно того же уровня. Такое окно всегда отображается поверх своего владельца и исчезает при минимизации окна-владельца. Типичным случаем владения одного окна верхнего уровня другим является приложение, отображающее диалоговое окно. Диалоговое окно не является дочерним окном (оно не ограничено клиентской областью основного окна приложения), но его владельцем остается окно приложения.
Несколько функций позволяют приложению исследовать иерархию окон и находить определенные окна. Ниже приведен обзор некоторых наиболее часто употребляемых функций:
GetDesktopWindow |
Позволяет приложению получить дескриптор текущего окна рабочего стола. |
EnumWindows |
Перечисляет все окна верхнего уровня. Определенная пользователем функция обратного вызова, адрес которой передается в вызов EnumWindows, вызывается один раз для каждого окна верхнего уровня. Функция EnumWindows не перечисляет окна верхнего уровня, созданные после вызова функции, даже если она еще не завершила перечисление во время создания нового окна. |
EnumChildWindows |
Перечисляет все дочерние окна указанного окна, дескриптор которого |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.