Окт 13

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

Реальная работа приложения осуществляется в оконной процедуре (window procedure). Оконная процедура определяет то, что выводится в клиентскую область окна, и то, как окну реагировать на пользовательский ввод.
Заголовок оконной функции всегда имеет следующий вид:
LRESULT CALLBACK WndProcCHWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Четыре параметра оконной процедуры идентичны первым четырем полям структуры MSG. Первый параметр функции содержит дескриптор окна, получающего сообщение. Во втором параметре указывается идентификатор сообщения. Для системных сообщений в Win32 зарезервированы номера от 0 до 1024. Третий и четвертый параметры содержат дополнительную информацию, которая распознается системой в зависимости от типа полученного сообщения.
Вместо имени WndProc можно использовать любое другое имя, но оно должно совпадать со значением поля IpfnWndProc структуры wc.
В рассматриваемой программе имеется только одно окно класса MyClass. Дескриптор окна hMainWnd получен вызовом функции CreateWindow. Поэтому при вызове оконной процедуры ее параметру hWnd всегда передается значение hMainWnd. Если же в программе создается несколько окон на основе одного и того же класса окна (и, следовательно, имеющих одну и ту же оконную процедуру), тогда параметру hWnd будет передаваться дескриптор конкретного окна, получающего сообщение.
Обычно программисты используют оператор switch для определения того, какое сообщение получено и как его обрабатывать. Если сообщение обрабатывается, то оконная процедура обязана вернуть нулевое значение. Все сообщения, не обрабатываемые оконной процедурой, должны передаваться системной функции DefWindowProc. В этом случае оконная процедура должна вернуть то значение, которое возвращает DefWindowProc.
Таким образом, программист пишет код только для тех сообщений, которые нуждаются в нестандартной обработке. В программе Hellol таких сообщений всего три: WM_PAINT, WM_CL0SE и WM_DESTR0Y.