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




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

Если диалоговое окно закрывается при щелчке на кнопку 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

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: