Лекция 7. Элементы управления 
";


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лекция 7. Элементы управления



Элемент управления (ЭУ) – это дочернее окно специального типа, обычно применяемое для того, чтобы пользователь мог с его помощью выполнить какое-то простое действие (например, выполнить команду). В результате этого действия элемент управления посылает окну-владельцу сообщение. Например, у нажимаемой кнопки есть единственная простая функция – когда пользователь нажимает кнопку, то она посылает своему родительскому окну (диалоговому окну) сообщение WM_COMMAND. Чаще всего ЭУ встречаются в диалоговых окнах, но их можно использовать и в любых других окнах, в т.ч. в окнах верхнего уровня.

В Windows есть набор стандартных классов ЭУ (6 типов). Они появились в самой первой версии Windows и реализованы в модуле User.exe. Еще примерно 15 типов ЭУ появились в Windows 95. Их, чтобы отличать от ЭУ старых версий Windows, иногда называются стандартными элементами управления Windows 95. Они реализованы в динамической библиотеке Comctl32.dll.

Т.к. ЭУ являются дочерними окнами, они автоматически перемещаются вместе с родительским окном, автоматически уничтожаются вместе с ним, а также ограничены при отображении областью родительского окна. Все сообщения от ЭУ посылаются родительским окнам.

 

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

В таблице 7.1 перечислены 6 типов ЭУ, для которых Windows автоматически регистрирует оконные классы, вместе с соответствующими классами-оболочками MFC.

Таблица 7.1. Стандартные элементы управления

Тип элемента Имя оконного класса WNDCLASS Класс MFC
Кнопка BUTTON CButton
Список LISTBOX CListBox
Элемент редактирования EDIT CEdit
Комбинированный список COMBOBOX CComboBox
Полоса прокрутки SCROLLBAR CScrollBar
Статический элемент STATIC CStatic

ЭУ можно создать как объект класса MFC и вызвать у него функцию-член Create, например, для создания кнопки с надписью Запуск:

CButton m_wndPushButton; m_wndPushButton.Create("Запуск", WS_CHILD ¦ WS_VISIBLE ¦ BS_PUSHBUTTON, rect, this, IDC_BUTTON);

В этом примере создается нажимаемая кнопка (стиль BS_PUSHBUTTON), которая будет дочерним окном окна this и будет занимать в его клиентской области область rect. Целочисленный идентификатор IDC_BUTTON часто называется идентификатором дочернего окна или идентификатором элемента управления. В данном окне все дочерние ЭУ, на сообщения которых требуется реагировать, должны иметь уникальные идентификаторы.

ЭУ посылают окну-владельцу уведомления о событиях в виде сообщений WM_COMMAND. Смысл этих сообщений зависит от типа элемента, но в любом случае, уточняющая информация хранится в параметрах сообщения wParam и lParam. В них передается идентификатор ЭУ и код уведомления. Так, при нажатии нажимаемой кнопки она посылает сообщение WM_COMMAND с кодом уведомления BN_CLICKED, который занимает старшие 16 бит слова wParam. Идентификатор кнопки помещается в младшие 16 бит слова wParam. В lParam передается оконный идентификатор кнопки.

Чтобы не разбирать сообщения WM_COMMAND "поразрядно", в большинстве MFC-приложений для связи уведомлений ЭУ с функциями-членами для их обработки используется карта сообщений. Например, чтобы при нажатии кнопки IDC_BUTTON вызывалась функция-член OnButtonClicked, в карту сообщений надо внести запись:

ON_BN_CLICKED(IDC_BUTTON, OnButtonClicked)

ON_BN_CLICKED – один из нескольких макросов карты сообщений MFC, связанных с уведомлениями ЭУ. Есть набор макросов ON_EN_... для элементов редактирования и ON_LBN_... для списков. Также есть общий макрос ON_CONTROL, который позволяет обрабатывать любые уведомления от ЭУ любого типа. ЭУ посылают сообщения своим окнам-владельцам, но очень часто сообщения посылаются и в обратном направлении. Например, в кнопке с независимой фиксацией можно поставить флажок, если послать ей уведомление BM_SETCHECK с параметром wParam =BST_CHECKED. MFC упрощает посылку сообщений ЭУ за счет того, что в их классах-оболочках есть функции-члены с понятными названиями. Например, чтобы послать сообщение BM_SETCHECK, можно вызвать функцию-член CButton:

m_wndCheckBox.SetCheck(BST_CHECKED);

Т.к. ЭУ являются окнами, для работы с ними полезны некоторые функции-члены, унаследованные от CWnd. Например, функция SetWindowText меняет заголовок окна верхнего уровня, но также помещает текст в элемент редактирования. Есть и другие полезные функции CWnd: GetWindowText для получения текста от ЭУ, EnableWindow для включения/выключения ЭУ, SetFont для изменения шрифта ЭУ. Если вы хотите сделать что-то с ЭУ, но не находите подходящей функции-члена в классе-оболочке ЭУ, может быть, вы найдете нужную функцию в классе CWnd.

 

1.1 Кнопки: класс CButton

Класс CButton представляет ЭУ "кнопка". Есть четыре разновидности кнопок (рис. 7.1): нажимаемые кнопки, кнопки с независимой фиксацией, кнопки с зависимой фиксацией и групповые блоки.

Рис. 7.1. Четыре разновидности ЭУ "Кнопка".

При создании кнопки определенного типа ей вместе с флагами оконного стиля указывается один из стилей кнопки, например, BS_PUSHBUTTON или BS_CHECKBOX. Некоторые стили влияют на способ расположения текста на кнопке (BS_LEFT, BS_CENTER и др.).

 

Нажимаемые кнопки

Нажимаемая кнопка – это ЭУ кнопка со стилем BS_PUSHBUTTON. При нажатии она посылает родительскому окну уведомление BN_CLICKED. Например, обработку нажатия кнопки можно выполнить так:

// Фрагмент карты сообщений CMainWindow ON_BN_CLICKED(IDC_BUTTON, OnButtonClicked) ... void CMainWindow::OnButtonClicked() { MessageBox("Кнопка была нажата!"); }

Как и командные обработчики пунктов меню, обработчики BN_CLICKED не имеют ни параметров, ни возвращаемого значения.

 



Поделиться:


Последнее изменение этой страницы: 2016-08-01; просмотров: 295; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.223.119.17 (0.004 с.)