MFC--遇到致命的死亡钻石

时间:2018-03-23 19:19:21

标签: windows visual-c++ mfc diamond-problem

Windows编程中的新手。

我想创建一个同时使用CPropertyPageCDHtmlDialog的对话框?

class CPropertyPage : public CDialog  
class CDHtmlDialog  : public CDialog

由于我无法将上述每种情况的继承更改为“虚拟公开”,是否仍然可以创建一个包含CPropertyPage字段和CDHtmlDialog中某些字段的对话框?

1 个答案:

答案 0 :(得分:2)

您可以将HTML对话框创建为属性页的子对话框。唯一的问题是,如果用户按下取消,子对话框将关闭。您必须覆盖CDHtmlDialog::OnCancel。例如:

class CMyDHtmlDialog : public CDHtmlDialog
{
    void OnCancel()
    {
        //GetParent()->GetParent()->PostMessage(WM_COMMAND, IDCANCEL);
    }
};

class CMyPropertyPage : public CPropertyPage
{
    CMyDHtmlDialog child;
    BOOL OnInitDialog()
    {
        BOOL res = CPropertyPage::OnInitDialog();
        child.Create(IDD_HTML, this);
        CRect rc;
        GetClientRect(&rc);
        child.SetWindowPos(NULL, 0, 0, rc.Width(), rc.Height(), SWP_SHOWWINDOW);
        return res;
    }
};