WinProc PROC,
hWnd: DWORD,; Дескриптор окна localMsg: DWORD,; Идентификатор сообщения wParam: DWORD,; Параметр 1 (зависит от сообщения) lParam: DWORD; Параметр 2 (зависит от сообщения) Обратите внимание, что значение третьего и четвертого параметров процедуры зависит от типа поступившего сообщения. Например, при обработке щелчка кнопкой мыши, параметр lParam указывает координаты X и Y точки на экране, в которой находится указатель в момент щелчка. В примере программы, приведенном ниже, процедура WinProc будет обрабатывать всего три сообщения: • WMLBUTTONDOWN — генерируется в ответ на щелчок левой кнопкой мыши; • WM_CREATE — уведомляет программу о создании основного окна; • WM_CLOSE — информирует программу о том, что ее основное окно закрывается. Например, ниже приведен фрагмент кода процедуры WinProc, в котором обрабатывается сообщение WM_LBUTTONDOWN. При этом вызывается функция MessageBox, отображающая на экране окно сообщения, информирующее пользователя о произошедшем событии (рис.): .IF eax == WM_LBUTTONDOWN INVOKE MessageBox, hWnd, ADDR PopupText, ADDR PopupTitle, MB_OK Jmp WinProcExit Сообщения для которых не предусмотрена обработка передаются на обработку стандартной процедуре системы Windows, которая называется DefWindowProc. Процедура ErrorHandler Эта процедура не является обязательной и создается исключительно ради удобства. Она вызывается в случае, если при регистрации класса и создании основного окна программы возникнет ошибка. Например, если класс основного окна программы бьл успешно зарегистрирован, функция RegisterClass возвращает ненулевое значение. Если эта функция вернет нулевое значение, вызывается процедура ErrorHandler, в которой отображается сообщение об ошибке, а затем работа программы завершается: INVOKE RegisterClass, ADDR MainWin .IF eax == 0 Call ErrorHandler Jmp Exit_Program ENDIF В процедуре ErrorHandler выполняются несколько важных действий, перечисленных ниже: • вызывается функция GetLastError, с помощью которой определяется системный код ошибки; • вызывается функция FormatMeesage, которая возвращает адрес строки, содержащей сообщение об ошибке, сформированное операционной системой; • вызывается функция MessageBox, с помощью которой полученная от функции FormatMeesage текстовая строка выводится на экран в окне сообщений; • вызывается функция LocalFree, которая освобождает память, занимаемую строкой, содержащей сообщение об ошибке.
|