Delphi. Трюки и эффекты - стр. 32
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, //Координата X по умолчанию
CW_USEDEFAULT, //Координата Y по умолчанию
CW_USEDEFAULT, //Ширина по умолчанию
CW_USEDEFAULT, //Высота по умолчанию
HWND(nil), //Нет родительского окна
HMENU(nil), //Нет меню
hInst,
nil);
if (hMainWnd = HWND(nil)) then Exit;
//Инициализация модуля Controls для работы с главным окном
Controls.hParentWnd := hMainWnd;
Controls.hAppInst := hInst;
//Создание элементов управления
CreateFrame(10, 80, 170, 70, –1, 'Кнопки');
CreateButton(20, 100, 70, 30, 1001, 'Кнопка 1');
CreateButton(100, 100, 70, 30, 1002,'Кнопка 2');
CreateFrame(200, 10, 200, 180, –1, 'Флажки и переключатели');
CreateCheck(210, 30, 180, 20, 2001, 'Флажок 1');
CreateCheck(210, 60, 180, 20, 2002, 'Флажок 2', True);
CreateOption(210, 100, 180, 20, 3001, 'Переключатель 1', True);
CreateOption(210, 130, 180, 20, 3002, 'Переключатель 2', False,
True);
CreateOption(210, 160, 180, 20, 3003, 'Переключатель 3', True);
CreateFrame(420, 10, 300, 180, –1, 'Списки и статические
надписи');
CreateLabel(430, 30, 70, 20, -1, 'Надпись');
CreateCombo(510, 30, 200, 100, 4001);
CreateList(430, 60, 280, 120, 5001);
CreateFrame(200, 200, 200, 240, –1, 'Текстовые поля');
CreateEdit(210, 220, 180, 20, 6001, 'Текст в текстовом поле');
CreateMemo(210, 250, 180, 180, 6002, 'Текст в многострочном'
+ #13 + #10 + 'текстовом поле');
//Добавление строк в списки
AddToCombo(4001, 'Строка 1');
AddToCombo(4001, 'Строка 2');
AddToCombo(4001, 'Строка 3');
AddToList(5001, 'Строка 1');
AddToList(5001, 'Строка 2');
AddToList(5001, 'Строка 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);
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;