Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
161-192.doc
Скачиваний:
2
Добавлен:
11.11.2019
Размер:
358.91 Кб
Скачать

194

С элементами управления диалогового окна связываются переменные-члены класса диалогового окна. Как осуществляется обмен данными между ними рассмотрено в следующем параграфе.

Управление обменом и проверкой данных

Если диалоговое окно закрывается при щелчке на кнопку OK, то происходит передача данных из элементов управления диалогового окна в связанные с ними переменные класса диалогового окна. Когда диалоговое окно открывается, то из переменных класса диалогового окна данные переносятся в управляющие элементы. Для реализации этих действий используется механизм DDX/DDV (Dialog data exchange/ Dialog data validation — Обмен данными диалога/Проверка правильности данных). Автоматическая передача и проверка данных осуществляется с помощью глобальных функций с префиксами DDX и DDV. При вызове функций, выполняющих обмен данными, т.е. имеющих префикс DDX, им передаются такие аргументы: указатель на объект класса CDataExchange, идентификатор элемента управления и идентификатор переменной-члена класса диалогового окна. Каждая из этих функция включает в свое имя тип элемента управления. Некоторые функции перегружаются и в качестве параметра используют разные типы данных, которыми могут обмениваться диалоговое окно и соответствующий класс. Примеры некоторых прототипов функций приводятся ниже.

void AFXAPI DDX_Check(CDataExchange* pDX, int nIDC, int& value); void AFXAPI DDX_Control(CDataExchange* pDX, int nIDC, CWnd& rControl ); void AFXAPI DDX_Radio(CDataExchange* pDX, int nIDC, int& value); void AFXAPI DDX_Text(CDataExchange* pDX,int nIDC,CString& value); void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, int& value);

Функции, имя которых начинается с префикса DDV, выполняют проверку заданных ограничений на вводимые данные. Если в диалоговом окне Add Member Variable Wizard указать диапазон граничных значений переменной, связанной с элементом управления, то в исходный код будет добавлена соответствующая функция проверки данных. Прототипы некоторых функций проверки правильности данных показаны ниже.

void AFXAPI DDV_MaxChars(CDataExchange* pDX,CString const& value, int nChars );

void AFXAPI DDV_MinMaxInt(CDataExchange* pDX, int value, int minVal, int maxVal );

void AFXAPI DDV_MinMaxFloat( CDataExchange* pDX, float value, float minVal, float maxVal );

Если используется DDX механизм, то начальные значения переменных-членов класса диалогового окна, связанных с элементами управления, устанавливаются в функции CDialog::OnInitDialog(), переопределенной в классе диалогового окна. Перед отображением диалогового окна MFC автоматически передает значения переменных элементам управления. Для этого функция CDialog::OnInitDialog() вызывает метод CWnd::UpdateData() для инициализации элементов управления диалогового окна. Этот же механизм передает значения от элементов управления переменным-членам класса диалогового окна, когда пользователь щелкает на кнопку OK. Функция CWnd::UpdateData() передает данные в двух направлениях, благодаря аргументу, переданному ей. Функция объявлена следующим образом:

BOOL CWnd::UpdateData( BOOL bSaveAndValidate = TRUE );

Параметром функции является переменная-член класса CDataExchange. В класс CDataExchange включен элемент данных BOOL m_bSaveAndValidate, значение которого TRUE означает, что механизм обмена данными DDX использует передачу данных из управляющих элементов диалогового окна в переменные класса диалогового окна. Значение m_bSaveAndValidate = FALSE используется в случае инициализации значений элементов управления из переменных класса диалогового окна. Таким образом, чтобы обновить значения элементов управления с отображением соответствующих изменений в диалоговом окне, вызывается функция с аргументом FALSE.

BOOL CWnd::UpdateData(FALSE);

Сохранение значений элементов управления диалогового окна в переменных соответствующего класса выполняется при вызове функции с аргументом TRUE:

BOOL CWnd::UpdateData(TRUE);

Чтобы выполнить обмен данными функция CWnd::UpdateData() вызывает функцию DoDataExchange() класса диалогового окна, которой в качестве аргумента передается указатель на объект класса CDataExchange, поддерживающий обмен данными (DDX) и проверку (DDV) данных диалога. Прототип функции такой:

virtual void CWnd::DoDataExchange(CDataExchange* pDX);

Функция DoDataExchange() класса диалогового окна, вызывая функции с префиксами DDX и DDV, передает данные из элементов управления в переменные-члены класса диалогового окна и наоборот.

MFC-классы для элементов управления

MFC предоставляет классы, позволяющие манипулировать элементами управления различных типов (табл.6.3). Большинство этих классов порождаются от класса CWnd.

Т а б л и ц а 6.3

MFC-классы для манипулирования элементами управления

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]