Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ZH ос 20 вопр 36 стр.doc
Скачиваний:
11
Добавлен:
20.09.2019
Размер:
435.71 Кб
Скачать

14. Работа с окнами в ос Windows. Классы окон. Z-порядок окон. Описание окон в ос Windows.

Термин "объект окна" относится к любому интерфейсному объекту, представляющему окно, а в Windows это почти все, что выводится на экран. В качестве шаблона определения большей части фундаментального поведения основного окна и любого всплывающего окна приложения ObjectWindows использует тип TWindow.

TWindow имеет три типа-потомка: TMDIWindow, TControl и TEditWindow, так что все они также являются оконными объектами, хотя на самом деле это не окна в полном смысле слова. Типы MDI используются в приложениях ObjectWindows, которые соответствуют стандарту многодокументального интерфейса Windows. TControl определяет управляющие элементы, такие как командные кнопки и блоки списков. Чаще всего новые оконные типы являются производными от TWindow.

Каждое приложение Windows имеет основное окно. Это окно может выводиться в виде пиктограммы или не выводиться снова (скрытое окно), но существует всегда. Приложения ObjectWindows не являются исключением: они должны иметь основное окно, представленное оконным объектом.

Инициализация объектов окон

Оконные объекты представляют элементы окна, связанные через описатели, сохраненные в наследуемом из TWindowsObject поле HWindow. Так как объект окна имеет две части, его создание требует двух шагов: инициализации объекта и создания визуального элемента.

Инициализация окна - это процесс создания оконного объекта

ObjectWindows путем вызова конструктора Init:

Window1 := New(PWindow,Init(nil, 'Заголовок окна 1'));

Window2 := New(PNewWindowType,Init(nil,'Заголовок окна 2'));

Init создает новый оконный объект и устанавливает поле Title в Attr в передаваемый аргумент PChar. Первый аргумент вызова Init - это оконный объект порождающего окна. Если окно является основным окном (не имеющим порождающего окна), то это nil.

Установка атрибутов создания

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

Атрибуты создания оконного объекта, такие как стиль, заголовок и меню, записываются в поле Attr объекта - записи типа

TWindowAttr. TWindowAttr содержит следующие поля:

Атрибуты создания окна

| Поле | Тип | Использование |

| Title | PChar | Строка заголовка. |

| Style | Longint | Комбинированная константа стиля. |

| Menu | HMenu | Описатель ресурса меню. |

| X | Integer | Горизонтальная координата экрана|

| | | верхнего левого угла окна. |

| Y | Integer | Вертикальная координата экрана|

| | | верхнего левого угла окна. |

| W | Integer | Начальная ширина окна в координатах экрана |

| H | Integer | Начальная высота окна в координатах экрана |

В Windows используется z-порядок окон. Окна располагаются одно над другим по вертикали. Окно на верху лежит поверх всех. Нижнее окно в самом низу, остальные в промежутке. Для этого в Windows существует специальный список, в котором эти окна расположены. Важность окна зависит от стиля окна. Самую высокую важность имеет стиль WS_EX_TOPMOST.

Когда система создает окно она помещает это окно на самом верху относительно окон того же самого типа. Вы можете использовать функцию BringWindowToTop(), чтобы вывести окно наверх относительно окон того же самого типа. Вы можете реорганизовать порядок, используя функции DeferWindowPos() и SetWindowPos().

Функция GetNextWindow() возвращает указатель к следующему или предыдущему окну в Z-порядке. Для поиска подчиненных окон используется функция GetTopWindow().

Каждое окно имеет дескриптор – переменную типа HWND. Каждый дескриптор является указателем на структуру HWND, в которой хранится информация о каждом окне.

Каждая структура HWND состоит из следующих полей:

  • указатель на окно того же уровня

  • указатель на 1-е дочернее окно

  • структура RECT, которая определяет границы окна

  • структура RECT, которая определяет границы клиентской области

  • указатель на начало очереди сообщений для данного окна

  • указатель на область в куче DDI32.DLL, в которой содержится та часть окна, которую нужно перерисовать

  • адрес оконной процедуры с данным окном

Процедуры и функции работы с окнами:

FindWindow – получить дескриптор окна

GetNextWindow – получить дескриптор следующего или предыдущего окна в Z-последовательности

GetWindowText – получить заголовок окна.