我们的 MFC 程序中有多个非常相似的对话框。这些对话框中的每一个都包含类似的控件(即,它们都包含名称、日期、地址等)。因此,尽管这些控件的处理是相同的,但我们不得不多次为窗口编写显示代码。我正在寻找有关如何更改我们的 gui 的建议,以便我只需要在一个地方进行处理,而不必多次进行。
我的想法是有一个类来进行处理并将指针传递给控件以显示给该类,尽管我觉得这不是一个很好的 OO 设计。
想法?
我们的 MFC 程序中有多个非常相似的对话框。这些对话框中的每一个都包含类似的控件(即,它们都包含名称、日期、地址等)。因此,尽管这些控件的处理是相同的,但我们不得不多次为窗口编写显示代码。我正在寻找有关如何更改我们的 gui 的建议,以便我只需要在一个地方进行处理,而不必多次进行。
我的想法是有一个类来进行处理并将指针传递给控件以显示给该类,尽管我觉得这不是一个很好的 OO 设计。
想法?
创建一个派生自CDialog
(例如)的基类,将所有常用函数放在那里,并从而不是CMyDlgBase
派生对话类。CMyDlgBase
CDialog
您现在可以调用这些函数,CMyDlgBase
就好像它们是直接在您的对话框类中声明的一样。
编辑示例代码以验证对话框共有的项目(CDlg1
并CDlg2
派生自CMyDlgBase
),不包括错误检查代码:
BOOL CMyDlgBase::ValidateName(UINT nID)
{ CString ss;
CEdit *pEdit = GetDlgItem(nID);
pEdit->GetWindowText(ss);
if (ss.Find(_T("A")) < 0) // some kind of validation
{ MessageBox(_T("Name should contain the character 'A'"));
pEdit->SetFocus();
return FALSE;
}
return TRUE;
}
CDlg1::OnOK()
{ if (!ValidateName(IDC_DLG1_NAME)) // resource id value = 101
return;
CDialog::OnOK(); // This will close the dialog and DoModal will return.
}
CDlg2::OnOK()
{ if (!ValidateName(IDC_DLG2_NAME)) // resource id value = 102
return;
CDialog::OnOK(); // This will close the dialog and DoModal will return.
}