Листинг 2.5.
Функция обработки сообщений
//Функция обработки сообщений
function WindowFunc(hWnd:HWND; msg:UINT; wParam:WPARAM;
lParam:LPARAM):LRESULT; stdcall;
var
ps: PAINTSTRUCT;
begin
case msg of
WM_CLOSE:
if (hWnd = hMainWnd) then
PostQuitMessage(0); //При закрытии окна – выход
WM_PAINT:
begin
//Перерисовка содержимого окна
BeginPaint(hWnd, ps);
TextOut(ps.hdc, 10, 10, \'Текст в окне\', 12);
EndPaint(hWnd, ps);
end;
else
begin
//Обработка по умолчанию
WindowFunc := DefWindowProc(hWnd, msg, wParam, lParam);
Exit;
end;
end;
WindowFunc := S_OK; //Сообщение обработано
end;
В этой функции реализована обработка сообщения WMPAINT – запроса на перерисовку содержимого окна. Обработка сообщения WMCLOSE предусмотрена для того, чтобы при закрытии главного окна происходил выход из приложения. Для всех остальных сообщений выполняется обработка по умолчанию.
Обратите особое внимание на прототип этой функции: типы возвращаемых значений, типы параметров и способ вызова функции должны быть именно такими, как в листинге 2.5. Возвращаемое значение зависит от конкретного сообщения. Чаще всего это SOK (константа, равная 0) в случае успешной обработки сообщения.
Далее в листинге 2.6 приводится часть программы, собственно использующая регистрацию, создание окна, а также организующая обработку сообщений для созданного окна.