Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гл.8 ОС буклет.doc
Скачиваний:
5
Добавлен:
11.11.2018
Размер:
286.21 Кб
Скачать

8.3.1. Интерфейс оконной и графической подсистемы Windows хр

В разделе 2 была рассмотрена архитектура оконной и графической подсистемы Windows ХР. В этом разделе остановимся на базовых принципах организации программного кода для этой подсистемы и приведем небольшой пример приложения, которое использует ее возможности.

Базовым элементом Win32-приложения, которое использует возможности оконной и графической подсистемы, есть окно, где это приложение может отображать свою информацию. Каждое окно принадлежит некоторому классу окна (Windows class), который регистрируется в системе. Программа начинает свое выполнение c регистрации класса окна, после этого объект окна может быть размещен в памяти и отображен.

Взаимодействие с пользователем в приложениях, которые используют окна, отличается от той, о которой шла речь во время рассмотрения консольных применений. Основным здесь есть то, что приложение должно быть всегда готовым выполнить код в ответ на действия пользователя. Например, в любой момент может понадобиться изменения изображения в силу того, что пользователь изменил размер окна или сделал его активным, выбрав соответствующую пиктограмму мышью на линейке задач.

Такую постоянную готовность сложно реализовать с использованием последовательного выполнения кода. В Win32 (и большинства систем, которые реализуют графический интерфейс пользователя) используют другой подход к организации программного кода: в ней реализованы приложения, управляемые сообщениями (message-driven applications). Все действия пользователя (ввод с клавиатуры, перемещение мыши и тому подобное) ОС перехватывает и превращает в сообщения (messages), которые направляет приложению, которое владеет окном, с которым работал пользователь. Код приложения содержит цикл обработки сообщений, где происходят ожидания сообщений и их необходимые превращения, а также обработчик сообщений, который вызывают в случае получения каждого сообщения. В обработчики реализован код, который определяет реакцию приложения на то или другое действие пользователя. Цикл обработки сообщений длится до тех пор, пока в него не попадет особенное сообщение, которое вынуждает завершить работу приложения.

Самый простой пример реализации Win32-застосування с использованием графического интерфейса пользователя приведено ниже.

Разработка главной функции приложения

Win32-приложение с поддержкой окон отличаются от консольных приложений, описанных доныне. В первую очередь главную функцию таких приложений определяют иначе -ее называют Winmain():

Int winapi Winmain hinstance ih. Hinstance tp.

LPSTR cmdline, int cmd_show ) {

// код главной функции приложения

}

где: th - дескриптор экземпляра применения, который можно использовать для идентификации выполняемой копии применения;

cmdline - командная строка, заданная во время запуска применения;

cmd_show - код, который определяет, как предусмотрено отображать главное окно применения (Sw_maximize, Sw_minimize и тому подобное).

В коде Winmain() в первую очередь нужно зарегистрировать класс главного окна применение. Класс окна отображают структурой WNDCLASS, для которой нужно задать ряд полей, в частности:

  • LpszClassName - имя класса, под которым он будет зарегистрирован;

  • LpfnWndProc - адрес процедуры окна, которую система будет вызывать с появлением сообщений, адресованных этому окну;

  • hIcon - дескриптор пиктограммы этого окна (она будет отображаться в его заглавии или на панели задач; для получения такого дескриптора используют функцию LoadIcon());

  • hCursor - дескриптор курсорa, который будет отображаться над окном; для его получения используют функцию LoadCursor());

  • hbrBackground - дескриптор специального объекта { кисти, brash), что определяет фоновый цвет этого окна (стандартный цвет фона может быть задан добавлением единице к заранее определенной константе COLOR_WINDOW).

Регистрация класса окна дает возможность размещать в памяти и отображать окна такого класса. Для размещения окна в памяти используют функцию Create-Window():

HWND CreateWindow(LPCTSTR classname. LPCTSTR title. DWORD style,

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]