Каждое окно должно иметь оконную процедуру. Имя оконной процедуры определяется пользователем. Обобщенное приложение использует нижеследующую оконную процедуру для главного окна:
LRESULT WINAPI MainWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); |
Модификатор WINAPI используется потому, что оконная процедура должна быть вызвана в соответствии с объявленным стандартным соглашением о вызовах.
Оконная процедура получает сообщения от системы. Это могут быть сообщения управления окном или сообщения о вводе данных. Вы можете необязательно обрабатывать сообщение в своей оконной процедуре или переправлять сообщение системе для обработки по умолчанию, при помощи вызова функции DefWindowProc . Обобщенное приложение обрабатывает сообщения WM_PAINT, WM_COMMAND и WM_DESTROY, используя оператор switch, который структурируется как указано ниже:
switch( uMsg ) { case WM_PAINT: ... case WM_COMMAND: ... case WM_DESTROY: ... default: return( DefWindowProc( hWnd, msg, wParam, lParam )); } |
Сообщение WM_PAINT указывает, что Вы должны перерисовать все, что находится в окне или часть окна вашего приложения. Используйте функцию BeginPaint,
чтобы получить дескриптор контекста устройства, а затем использовать контекст устройства для рисования в пределах окна приложения, с функциями подобно TextOut.
Используйте EndPaint, чтобы освободить контекст устройства. Обобщенное приложение показывает на экране текстовую строку, " Привет, Мир!
", в окне, используя нижеследующий код:
case WM_PAINT: hDC = BeginPaint( hWnd, &ps ); TextOut( hDC, 10, 10, "Hello, World!", 13 ); EndPaint( hWnd, &ps ); break; |
Сообщение WM_COMMAND указывает, что пользователь выбрал командный пункт меню. Обобщенное приложение использует нижеследующий код, чтобы проверить, был ли его пункт меню About выбран:
case WM_COMMAND: switch( wParam ) { case IDM_ABOUT: ... break; } |
Большинство оконных процедур обрабатывает сообщение WM_DESTROY. Система отправляет это сообщение оконной процедуре немедленно после разрушения окна. Сообщение дает Вам возможность закончить обрабатывать и помещать сообщение WM_QUIT в очереди прикладной программы. Обобщенное приложение обрабатывает сообщение WM_DESTROY как ниже указано:
case WM_DESTROY: PostQuitMessage( 0 ); break; |