Разработка оконной процедуры


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

Обратите внимание! на то, что каждый оператор case возвращает конкретное значение для каждого сообщения. Для сообщений, которые он не обрабатывает, оконная процедура вызывает функцию DefWindowProc .

Демонстрационный пример

LRESULT CALLBACK MainWndProc(

HWND hwnd,      // дескриптор окна

UINT uMsg,      // код сообщения

WPARAM wParam,  // первый параметр сообщения

LPARAM lParam)  // второй параметр сообщения

 {

switch (uMsg)

{

case WM_CREATE:

// Инициализация окна.

return 0;

 

case WM_PAINT:

// Прорисовка рабочей области окна.

return 0;

 

case WM_SIZE:

// Установка размера и позиции окна.

return 0;

 

case WM_DESTROY:

// Очистка определяемых окном объектов данных

return 0;

 

//

// Обработка других сообщений.

//

 

default:

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

}

return 0;

}

 

Сообщение WM_NCCREATE посылается сразу после того, как ваше окно создано, но если приложение отвечает этому сообщению, возвращая значение ЛОЖЬ (FALSE), функция CreateWindowEx завершается ошибкой. Сообщение WM_CREATE отправляется после того, как ваше окна уже создано.

Сообщение WM_DESTROY посылается тогда, когда ваше окно собирается быть разрушенным. Функция DestroyWindow заботится о разрушении любых дочерних окон разрушаемого окна. Сообщение WM_NCDESTROY отправляется перед самым разрушением окна.

По крайней мере, оконная процедура должна обработать сообщение WM_PAINT, чтобы рисовать себя. Как правило, с таким же успехом она должна обрабатывать сообщения от мыши и клавиатуры. Чтобы установить, должна ли ваша оконная процедура их обрабатывать, справляйтесь с описаниями отдельных сообщений.

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

Процедура диалогового окна принимает сообщение WM_INITDIALOG вместо сообщения WM_CREATE и не передает необработанные сообщения функции DefDlgProc. Иначе, процедура диалогового окна становится точно такой же, что и оконная процедура.

Назад в оглавление
На главную страницу

Hosted by uCoz