- •Управление обменом и проверкой данных
- •Функции класса cWnd для манипулирования элементами управления диалогового окна
- •Связывание методов класса диалогового окна с элементами управления
- •Использование шрифтов в диалоговом окне
- •Некоторые стандартные шрифты Windows
- •Некоторые константы выравнивания текста
- •Задание 2. Создание класса диалогового окна и связывание его методов и атрибутов с элементами управления
- •Задание 3. Определение обработчиков сообщений, генерируемых элементами управления
- •Обработчики сообщения bn_clicked приложения FontDemo
- •Задание 4. Отображение диалогового окна и данных в его элементах управления
- •Задание 5. Отображение текста в окне представления в соответствии с выбранными в диалоговом окне атрибутами
Функции класса 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 и использовать шаблон диалогового окна вместо создания элементов управления по отдельности.
