Программирование в Delphi. Трюки и эффекты. Александр Чиртик
Чтение книги онлайн.
Читать онлайн книгу Программирование в Delphi. Трюки и эффекты - Александр Чиртик страница 23
+ #10 + 'текстовом поле');
//Добавление строк в списки
AddToCombo(4001, 'Строка 1');
AddToCombo(4001, 'Строка 2');
AddToCombo(4001, 'Строка 3');
AddToList(5 001, 'Строка 1');
AddToList(5 001, 'Строка 2');
AddToList(5 001, 'Строка 3');
ShowWindow(hMainWnd, SW_NORMAL);
//Запуск цикла обработки сообщений
while (Longint(GetMessage(mess, 0, 0, 0)) <> 0)
do begin
TranslateMessage(mess);
DispatchMessage(mess);
end;
end.
Код листинга 2.21 заодно демонстрирует использование некоторых из приведенных ранее функций работы с элементами управления. Выглядит созданное окно так, как показано на рис. 2.3.
Рис. 2.3. Окно с элементами управления
Принцип построения функции обработки сообщений для этого окна описан в листинге 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);
Text Out (ps.hdc, 10, 10, 'Текст в окне', 12);
EndPaint(hWnd, ps);
end;
WM_CLOSE:
if (hWnd = hMainWnd) then
PostQuit Message(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 функция не претендует на то, чтобы быть эталоном в порядке классификации сообщений от элементов управления. Иногда бывает полезно сразу классифицировать сообщения не по элементам управления, которые их прислали, а по типу самих сообщений. К тому же в ряде случаев можно предусмотреть один обработчик сообщений сразу для нескольких элементов управления, например, для группы переключателей. В таком случае полезным окажется параметр lParam сообщения