Листинг 2.34.
Функция обработки сообщений
function WindowFunc(hWnd:HWND; msg:UINT; wParam:WPARAM;
lParam:LPARAM):LRESULT; stdcall;
var
hOldFont: HFONT;
strBuf: String;
hEditDC: HDC;
begin
case msg of
WM_CLOSE:
if (hWnd = hMainWnd) then PostQuitMessage(0);
WM_CTLCOLOREDIT: //Сообщения от Edit перед перерисовкой
begin
//Зададим тексту Edit выбранный цвет
hEditDC := HDC(wParam);
SetTextColor(hEditDC, curColor);
GetCurrentObject(hEditDC, OBJ_BRUSH);
end;
WM_COMMAND:
if (HIWORD(wParam) = BN_CLICKED) then
begin
//Определим, какая кнопка нажата
case LOWORD(wParam) of
1001: //Открытие файла
begin
SetText(2001, \'Открыт файл:\' + #13 + #10 +
ShowOpen(\'Все файлы|*.*||\'));
end;
1002: //Сохранение файла
begin
SetText(2001, \'Путь для сохранения:\' + #13 + #10 +
ShowSave(\'Все файлы|*.*||\'));
end;
1003: //Выбор цвета
begin
curColor := ShowChooseColor(curColor);
Str(curColor, strBuf);
SetText(2001, \'Выбранный цвет:\' + #13 + #10 + strBuf);
end;
1004: //Выбор шрифта
begin
if (ShowChooseFont(font) = True) then
begin
//Замена шрифта в Edit
hOldFont := HFONT(
SendDlgItemMessage(hMainWnd,2001,WM_GETFONT, 0,0));
hCurFont := CreateFontIndirect(font);
SendDlgItemMessage(hMainWnd, 2001, WM_SETFONT,
Integer(hCurFont),
Integer(True));
SetText(2001, \'Текст, записанный выбранным
шрифтом\');
if (hOldFont <> 0) then DeleteObject(hOldFont);
end;
end;
1010: //Выбор папки
begin
SetText(2001, \'Выбранная папка:\' + #13 + #10 +
ShowChooseFolder());
end;
1011: //Подключение сетевого ресурса
begin
ShowConnection();
end;
1012: //Отключение сетевого ресурса
begin
ShowDisconnect();
end;
1013: //Окно «О программе»
begin
ShowAbout(\'Standart windows\',
\'Демонстрация использования стандартных \' +
\'окон диалога из чистого API-приложения\');
end;
end;
end;
else
begin
//Обработка по умолчанию
WindowFunc := DefWindowProc(hWnd, msg, wParam, lParam);
Exit;
end;
end;
WindowFunc := S_OK; //Сообщение обработано
end;
Обработка сообщений здесь довольно проста, за исключением изменения шрифта текстового поля. Обратите внимание на следующий отрывок листинга 2.34: