MFC-класс | Тип и описание элемента управления |
CAnimateCtrl | Анимация |
CButton | Кнопки, флажки, переключатели, рамки |
CBitmapButton | Кнопки, отображающие растровые рисунки |
CComboBox | Поле со списком |
CComboBoxEx | Расширенное поле со списком |
CDateTimeCtrl | Элемент Дата/Время |
CEdit | Поле |
CHeaderCtrl | Заголовок — окно, размещаемое над столбцами таблицы и содержащее заголовки столбцов с настраиваемой шириной |
CHotKeyCtrl | Горячая клавиша |
CIPAddressControl | IP-адрес |
CListBox | Список |
CCheckListBox | Список с флажками. Каждый пункт содержит флажок. Например, программа Setup в Visual C++ использует списки с флажками для предоставления пользователю возможности выбора инсталлируемых компонентов |
CDragListBox | Перемещаемый список. Позволяет пользователю перемещать отдельные пункты списка для их переупорядочения |
CListCtrl | Окно списка |
CMonthCalCtrl | Календарь по месяцам |
COleControl | Элементы управления ActiveX — многократно используемые компоненты программного обеспечения. |
ProgressCtrl | Индикатор |
CReBarCtrl | Переключаемая панель. |
CRichEditCtrl | Расширенное поле |
CScrollBar | Полосы прокрутки: вертикальная или горизонтальная |
CSliderCtrl | Регулятор |
CSpinButtonCtrl | Счетчик |
CStatic | Надписи, рисунки и рамки |
CStatusBarCtrl | Строка состояния. Использование класса CStatusBarCtrl — альтернатива способу создания строк состояния |
CTabCtrl | Набор вкладок. Использование класса CTabCtrl — альтернатива способу создания диалоговых окон с вкладками в программах MFC (далее в этой главе) |
Окончание табл. 6.3
MFC-класс | Тип и описание элемента управления |
CToolbarCtrl | Панель инструментов. Использование класса CToolbarCtrl — альтернатива способу создания панелей инструментов в программах MFC |
CTooltipCtrl | Всплывающая подсказка. При создании панели инструментов MFC автоматически реализует всплывающие подсказки |
CTreeCtrl | Дерево |
|
Функции-члены этих классов можно применять для получения информации или выполнения операций над элементом управления в диалоговом окне. Так как каждый из классов управления порождается прямо или косвенно от класса CWnd, то в число вызываемых функций-членов входят также функции, определенные в классе CWnd. В табл. 6.4 приведены функции, которые можно использовать для манипулирования элементами управления.
Т а б л и ц а 6.4
Функции класса CWnd для манипулирования
элементами управления диалогового окна
Функция | Назначение |
CheckDlgButton() | Выбирает или отменяет выбор флажка или переключателя |
CheckRadioButton() | Выбирает указанный переключатель и отменяет выбор остальных переключателей в указанном наборе |
DlgDirList() | Добавляет имена файлов, каталогов или дисков в список |
DlgDirListComboBox() | Добавляет имена файлов, каталогов или дисков в поле со списком |
DlgDirSelect() | Получает имя текущего, выбранного в списке, файла, каталога или диска |
DlgDirSelectComboBox() | Получает имя текущего, выбранного в поле со списком, файла, каталога или диска |
GetCheckedRadioButton() | Возвращает идентификатор выбранного переключателя в указанном наборе переключателей |
GetDlgItem() | Возвращает указатель на временный объект для заданного элемента управления |
GetDlgItemInt() | Возвращает числовое значение, представленное в текстовом виде в указанном элементе управления |
GetDlgItemText() | Получает текст, отображаемый внутри элемента управления |
Окончание табл. 6.4
Функция | Назначение |
GetNextDlgGroupItem() | Возвращает указатель на временный объект для следующего (или предыдущего) элемента управления внутри группы |
GetNextDlgTabItem() | Возвращает указатель на временный объект для следующего элемента управления (в порядке обхода), которому задано свойство Tabstop |
IsDlgButtonChecked() | Возвращает статус отметки флажка или переключателя |
SendDlgItemMessage() | Посылает сообщение элементу управления |
SetDlgItemInt() | Преобразовывает целое число в текст и передает его элементу управления |
SetDlgItemText() | Задает текст, отображаемый элементом управления |
EnableWindow() | Разрешает или блокирует доступ к элементу |
|
Вызов функции, инкапсулируемой в классе элемента управления диалогового окна, выполняется через объект класса элемента управления, связанный с элементом управления. Создать объект класса элемента управления можно такими способами.
Первый способ использует диалоговое окно Add Member Variable Wizard, в котором надо установить флажок Control variable, в списке Category выбрать значение Control. Мастер создаст соответствующий объект для элемента управления, например, объект класса CEdit для поля. При отображении диалогового окна MFC автоматически свяжет элемент управления с объектом класса так, чтобы можно было вызывать функции класса элемента управления для работы с ним. Функции можно вызывать только тогда, когда диалоговое окно отображено, иначе подобная связь не поддерживается.
Второй способ использует функцию CWnd::GetDlgItem()для объекта диалогового окна, чтобы получить указатель на временный объект элемента управления внутри диалогового окна. Например, вместо создания постоянного объекта класса элемента управления можно из функции CFormatDlg::OnInitDialog() инициализации диалогового окна вызвать функцию CWnd::GetDlgItem(), чтобы получить указатель на временный объект, для которого затем вызываются функции класса объекта управления. Прототип функции CWnd::GetDlg-Item() такой
|
CWnd* CWnd::GetDlgItem(int nID) const;
Параметр nID определяет идентификатор элемента управления, указатель на который требуется получить. Так как функция CWnd::GetDlgItem() возвращает указатель класса CWnd, то его необходимо преобразовать в указатель на соответствующий класс элемента управления. Так как указатель временный, он используется только во время обработки текущего сообщения и в дальнейшем не сохраняется.
Приведем пример определения указателя на объект класса CEdit, который связан с элементом управления, имеющим идентификатор IDC_SPACING.
CEdit *p_Edit = (CEdit *)GetDlgItem (IDC_SPACING);
При работе с флажками и переключателями необходимо определять их состояние. Эти элементы управления могут быть выбраны (установлены) или не выбраны (сброшены). Функция CWnd::IsDlgButtonChecked()вызывается для того, чтобы убедиться, что переключатель выбран или флажок установлен. Параметр определяет идентификатор элемента управления. Прототип функции такой.
UINT CWnd::IsDlgButtonChecked(int nIDButton) const;
Если в процессе работы с элементами управления необходимо сделать недоступным переключатель или запретить его отметку, то необходимо получить объект класса CButtonи связать его с переключателем, имеющим заданный идентификатор. Чтобы выбрать переключатель или отменить его выбор, вызовите функцию CButton::SetCheck(), прототип которой показан ниже. Параметр функции задает состояние переключателя (1 — выбран, 0 — не выбран, 2 — неопределенное).
void CButton::SetCheck(int nCheck);
Для разрешения или блокирования доступа к переключателю используют функцию CWnd::EnableWindow()с аргументом, равным TRUE, если элемент доступен, и FALSE, если он заблокирован. Прототип функции приводится ниже.
BOOL CWnd::EnableWindow(BOOL bEnable = TRUE);
Объекты класса CEdit, которые связаны с текстовым полем диалогового окна, можно использовать для ограничения количества вводимых символов. Для этого вызывают функцию CEdit::LimitText(), предварительно определив указатель на элемент управления.
((CEdit *)GetDlgItem (IDC_SPACING))->LimitText (1);
Хотя элементы управления обычно связаны с диалоговыми окнами, их можно отображать внутри любого окна программы. Например, можно отобразить один или несколько элементов управления прямо внутри окна представления. В этом случае необходимо добавить код для явного создания, размещения и отображения элемента управления. Для этого объявите объект соответствующего MFC-класса элемента управления (можно сделать его членом класса главного окна). Вызовите функцию-член класса элемента управления Create(), чтобы отобразить его, задав требуемый размер, позицию и другие атрибуты. Обратите внимание: элемент управления является дочерним по отношению к окну, в котором он отображается. Если окно представления в основном содержит лишь набор элементов управления, лучше всего породить класс представления от класса CFormViewи использовать шаблон диалогового окна вместо создания элементов управления по отдельности.