Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции-ТРПС.doc
Скачиваний:
13
Добавлен:
15.11.2018
Размер:
810.5 Кб
Скачать

8.2. Стандартные элементы управления

Следующим после меню, часто используемым ресурсом приложения, является диалог. Практически любое стандартное приложение Windows использует диалоговые панели. Однако вначале следует рассмотреть составляющие компоненты диалогов – элементы управления.

В Windows предопределен целый ряд различных элементов управления, таких, как кнопки, редакторы текстов и списки и прочее. Эти элементы управления именуются дочерними окнами управления (child window control). Все они создаются на базе предопределенных классов, но разработчик может определить и собственные классы дочерних окон, зарегистрировав их при помощи функции RegisterClass().

Вспомним, что дочернее окно, во-первых, определяется стилем WS_CHILD и всегда располагаются на поверхности родительского окна, как бы “прилипая” к нему. Во-вторых, при любом перемещении дочернее окно никогда не выходит за границы родительского окна. Родительское окно может содержать несколько элементов управления, которые будут перемещаться вместе с окном-родителем.

Чтобы родительское окно различало дочерние окна, последние должны иметь уникальный идентификатор и уникальный дескриптор окна.

Итак, достаточно просто создать нужные дочерние окна, указав их размеры, расположение и некоторые другие атрибуты. После этого приложение может взаимодействовать с элементами управления, передавая им и получая от них различные сообщения. При этом каждый элемент управления самостоятельно обрабатывает сообщения мыши и клавиатуры и извещает родительское окно о том, что его состояние изменилось. В этом случае дочернее окно становится для родительского окна устройством ввода. При этом оно инкапсулирует особые действия, связанные с графическим представлением окна на экране, реакцией на пользовательский ввод, и извещения другого окна при вводе любой информации. Приложению нет необходимости беспокоиться о логике обработки мыши этими окнами, или о логике их отрисовки. Все это входит в зону ответственности Windows, а все, что остается приложению – это обрабатывать сообщение WM_COMMAND. Этим сообщением дочерние окна информируют оконную процедуру о различных событиях.

Win32 API содержит новые элементы управления, которые используют сообщение WM_NOTIFY для извещения родительского окна.

8.2.1. Создание стандартных элементов управления

Динамически – вне шаблона – создать стандартный элемент управления проще всего с помощью функции CreateWindow(), используя один из предопределенных классов: “button”, ”edit”, “static”, “listbox”, “combobox” и “scrollbar”.

Например, кнопку можно создать так:

HWND hWndBotton = CreateWindow( “button”, “Отмена”, dwStyle, x, y, nWidth, nHeight, hWndParent, (HMENU)nIDctrl, g_hInst, NULL);

Параметр nIDctrl – числовой идентификатор окна. Для каждого создаваемого дочернего окна необходимо определить собственный уникальный идентификатор. Родительское окно будет различать элементы управления по этому параметру, получая сообщение WM_COMMAND от всех дочерних окон. Дескриптор hWndParent – это описатель родительского окна.

Кроме того, нужно указать конкретные параметры стиля dwStyle создаваемого окна для более точного определения вида и свойств каждого из элементов управления.

Оконные процедуры для стандартных элементов управления уже включены в состав ядра Windows. Они необходимы для обработки сообщений тех дочерних окон, которые созданы на основе перечисленных классов.