Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.doc
Скачиваний:
17
Добавлен:
14.02.2015
Размер:
641.54 Кб
Скачать

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

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

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

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

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

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

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

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

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

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

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

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

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

switch (iMsg)

{

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, iMsg, wParam, lParam);

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