0

我们的 MFC 程序中有多个非常相似的对话框。这些对话框中的每一个都包含类似的控件(即,它们都包含名称、日期、地址等)。因此,尽管这些控件的处理是相同的,但我们不得不多次为窗口编写显示代码。我正在寻找有关如何更改我们的 gui 的建议,以便我只需要在一个地方进行处理,而不必多次进行。
我的想法是有一个类来进行处理并将指针传递给控件以显示给该类,尽管我觉得这不是一个很好的 OO 设计。

想法?

4

1 回答 1

1

创建一个派生自CDialog(例如)的基类,将所有常用函数放在那里,并从而不是CMyDlgBase派生对话类。CMyDlgBaseCDialog

您现在可以调用这些函数,CMyDlgBase就好像它们是直接在您的对话框类中声明的一样。

编辑示例代码以验证对话框共有的项目(CDlg1CDlg2派生自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.
}
于 2013-10-27T07:34:11.867 回答