假设我定义了一个名为MyDialog的对话框,该对话框继承自CDialog
MyDialog有一个CEditBox,在资源中定义如下
EDITTEXT IDC_AMOUNT,40,127,35,14
PUSHBUTTON "OK",IDOK,51,193,50,14
这是MyDialog的DoDataExchange
void MyDialog::DoDataExchange(CDataExchange* pDX)
{
DDX_Text(pDX, IDC_AMOUNT, amount);
}
amount是double类型的变量。 我理解,如果我输入一个不是IDC_AMOUNT控件的双倍值并按OK,MFC将显示带有以下消息的消息框
Please enter a number
但我想知道是否用以下语句隐藏CEditBox:
CWnd* pWnd=GetDlgItem(IDC_AMOUNT);
ASSERT(pWnd);
pWnd->ShowWindow(FALSE);
然后在我按OK后,MFC再次执行IDC_AMOUNT验证。 换句话说,MFC是否再次执行验证隐藏控件?
答案 0 :(得分:4)
MFC只会验证在DoDataExchange
中调用DDX例程的所有控件。
DDX例程永远不会检查控件是启用还是隐藏。
如果您只想在控件可见的情况下进行数据交换,请更改代码。您还可以检查您是否处于加载或保存阶段
void MyDialog::DoDataExchange(CDataExchange* pDX)
{
// Only if saving and visible
if (pDX->m_bSaveAndValidate && GetDlgItem(IDC_AMOUNT)->IsWindowVisible())
DDX_Text(pDX, IDC_AMOUNT, amount);
}