Нам никто не мешает сделать универсальную функцию. Давайте добавим в описание переменную, меньше которой нельзя ставить.
void AFXAPI DDV_MyInt(CDataExchange* pDX, float t, float min) { if (t<min) { AfxMessageBox("error data"); pDX->Fail(); } }
А в функции вызова укажем ее.
void CTestDDVDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTestDDVDlg) DDX_Text(pDX, IDC_EDIT1, m_Ed1); //}}AFX_DATA_MAP DDV_MyInt(pDX,m_Ed1,10); }
Кстати данные проверятся и при попадании их в диалог. Если Вы не установите инициализацию больше 10, то можете получить вот такое сообщение и никакого диалога не увидите.
Исправим инициализацию и запустим.
CTestDDVDlg::CTestDDVDlg(CWnd* pParent /*=NULL*/) : CDialog(CTestDDVDlg::IDD, pParent) { //{{AFX_DATA_INIT(CTestDDVDlg) m_Ed1 = 20.0f; //}}AFX_DATA_INIT // Note that LoadIcon does not require a // subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); }
Все остальное работает точно также, меньше 10 вводить нельзя. Вводить можно большее количество параметров, например, минимальное и максимальное для цифр.