Листинг 2.22.
Функция обработки сообщений
//Функция обработки сообщений
function WindowFunc(hWnd:HWND; msg:UINT; wParam:WPARAM;
lParam:LPARAM):LRESULT; stdcall;
var
ps: PAINTSTRUCT;
begin
case msg of
WM_PAINT:
begin
//Перерисовка содержимого окна
BeginPaint(hWnd, ps);
TextOut(ps.hdc, 10, 10, \'Текст в окне\', 12);
EndPaint(hWnd, ps);
end;
WM_CLOSE:
if (hWnd = hMainWnd) then
PostQuitMessage(0); //При закрытии этого окна
//завершается приложение
WM_COMMAND:
begin
case LOWORD(wParam) of
//нажата «Кнопка 1»
1001: if HIWORD(wParam) = BN_CLICKED then;
//нажата «Кнопка 2»
1002: if HIWORD(wParam) = BN_CLICKED then;
//установлен «Флажок 1»
2001: if HIWORD(wParam) = BN_CLICKED then;
//установлен «Флажок 2»
2002: if HIWORD(wParam) = BN_CLICKED then;
//установлен «Переключатель 1»
3001: if HIWORD(wParam) = BN_CLICKED then;
//установлен «Переключатель 2»
3002: if HIWORD(wParam) = BN_CLICKED then;
//установлен «Переключатель 3»
3003: if HIWORD(wParam) = BN_CLICKED then;
//выделение в ComboBox
4001: if HIWORD(wParam) = CBN_SELCHANGE then;
//выделение в ListBox
5001: if HIWORD(wParam) = LBN_SELCHANGE then;
//изменен текст в Edit
6001: if HIWORD(wParam) = EN_CHANGE then;
//изменен текст в Memo
6002: if HIWORD(wParam) = EN_CHANGE then;
end;
end;
else
begin
//Обработка по умолчанию
WindowFunc := DefWindowProc(hWnd, msg, wParam, lParam);
Exit;
end;
end;
WindowFunc := S_OK; //Сообщение обработано
end;
Приведенная в листинге 2.22 функция отнюдь не претендует на то, чтобы быть эталоном в порядке классификации сообщений от элементов управления. Иногда бывает полезно сразу классифицировать сообщения не по элементам управления, которые их прислали, а по типу. К тому же в ряде случаев можно предусмотреть один обработчик сообщений сразу для нескольких элементов управления, например для группы переключателей. В таком случае полезным окажется параметр 1 Par am сообщения WM_COMMAND.
Кстати, размер исполняемого файла этого приложения всего 19 Кбайт.
2.4. Стандартные диалоговые окна Windows
Теперь рассмотрим, как можно только при помощи функций Windows API вызывать некоторые распространенные диалоговые окна. Чтобы использовать API-функции и структуры с информацией для этих диалоговых окон, необходимо подключить следующие модули:
• CommDlg – для окон открытия/сохранения файла, выбора цвета и шрифта, поиска и замены текста;
• ShlObj и ActiveX – для окна выбора папки (второй модуль нужен для дос тупа к интерфейсу IMalloc, зачем – будет рассказано далее);
• Windows – помимо объявления основных структур и API-функций, этот модуль содержит объявления функций для работы с окнами подключения и отключения от сетевого ресурса (сетевого диска);
• ShellAPI – для системного окна О программе.
Вариант использования рассматриваемых в этом разделе диалоговых окон приведен в подразд. «Демонстрационное приложение».