Давайте посмотрим, как можно самим сделать DDV функцию. В минимальном виде обязательных параметров всего два (указатель на объект CDataExchange и переменная). Само описание функции очень похоже на описание DDX, напишем ее.
void AFXAPI DDV_MyFl(CDataExchange* pDX, float t) { if (t<0) { AfxMessageBox("error data"); pDX->Fail(); } }
И добавим к описанием функций DDX, DDV:
void CTestDDVDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTestDDVDlg) DDX_Text(pDX, IDC_EDIT1, m_Ed1); //}}AFX_DATA_MAP DDV_MyFl(pDX,m_Ed1); }
Вот практически и все. Попробуем, запускаем диалог и введем отрицательное число. Потом нажмем OK.
Вот не пропускает. После закрытия информационного окна, фокус вернется к элементу, в котором ошибка, настойчиво требуя ввести правильные данные.