Шаг 60 - Передача параметров в DDV функцию

Нам никто не мешает сделать универсальную функцию. Давайте добавим в описание переменную, меньше которой нельзя ставить.

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, то можете получить вот такое сообщение и никакого диалога не увидите.

60_1.gif (6314 b)

Исправим инициализацию и запустим.

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 вводить нельзя. Вводить можно большее количество параметров, например, минимальное и максимальное для цифр.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 03.07.2002