Скачать книгу

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.

Листинг 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

Скачать книгу