使用类似的处理实现多个对话框

时间:2013-10-25 13:23:08

标签: user-interface mfc

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

思想?

1 个答案:

答案 0 :(得分:1)

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

现在可以调用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.
}