Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI.docx
Скачиваний:
49
Добавлен:
16.12.2018
Размер:
3.43 Mб
Скачать

2.2.14 Оконная процедура

Обо всем, о чем так долго говорилось, можно кратко сказать так: класс окна зарегистрирован, окно создано, окно выведено на экран, и для извлечения сообщений из очереди сообщений программа вошла в цикл обработки сообщений.

Реальная работа начинается в оконной процедуре, которую программисты обычно называют "window proc". Оконная процедура определяет то, что выводится в рабочую область окна и то, как окну реагировать на пользовательский ввод.

В программе HELLOWIN оконной процедурой является функция WndProc. Оконной процедуре можно назначить любое имя (любое, конечно, в той степени, в которой оно не будет конфликтовать с другими именами). В программе для Windows может содержаться более одной оконной процедуры. Оконная процедура всегда связана с определенным классом окна, который вы регистрируете, вызывая RegisterClassEx. Функция CreateWindow создает окно на основе определенного класса окна. На основе одного и того же класса можно создать несколько окон.

Оконная процедура всегда определяется следующим образом:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

Отметьте, что четыре параметра оконной процедуры идентичны первым четырем полям структуры MSG.

Первым параметром является hWnd, описатель получающего сообщение окна. Это тот же описатель, который возвращает функция CreateWindow. Для программы типа HELLOWIN, в которой создается только одно окно, имеется только один известный программе описатель окна. Если же в программе создается несколько окон на основе одного и того же класса окна (и следовательно одной и той же оконной процедуры), тогда hWnd идентифицирует конкретное окно, которое получает сообщение.

Вторым параметром является число (точнее 32-разрядное беззнаковое целое или UINT), которое идентифицирует сообщение. Два последних параметра (wParam типа WPARAM и lParam LPARAM) представляют дополнительную информацию о сообщении. Они называются "параметрами сообщения" (message parameters). Конкретное значение этих параметров определяется типом сообщения.

2.2.15 Обработка сообщений

Каждое получаемое окном сообщение идентифицируется номером, который содержится в параметре message оконной процедуры. В заголовочных файлах Windows определены идентификаторы, начинающиеся с префикса WM ("window message") для каждого типа сообщений.

Обычно программисты для Windows используют конструкции switch и case для определения того, какое сообщение получила оконная процедура и то, как его обрабатывать. Если оконная процедура обрабатывает сообщение, то ее возвращаемым значением должен быть 0. Все сообщения, не обрабатываемые оконной процедурой, должны передаваться функции Windows, которая называется DefWindowProc. Значение, возвращаемое функцией DefWindowProc, должно быть возвращаемым значением оконной процедуры.

В HELLOWIN функция WndProc обрабатывает только три сообщения: WM_CREATE, WM_PAINT и WM_DESTROY. Оконная процедура выглядит следующим образом:

switch(message)

{

case WM_CREATE:

[process WM_CREATE message]

return 0;

case WM_PAINT:

[process WM_PAINT message]

return 0;

case WM_DESTROY:

[process WM_DESTROY message]

return 0;

}

return DefWindowProc(hwnd, message, wParam, lParam);

Здесь важно отметить то, что вызов функции DefWindowProc обрабатывает по умолчанию все сообщения, которые не обрабатывает ваша оконная процедура.

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