【问题标题】:How can I inherit an MFC dialog box?如何继承 MFC 对话框?
【发布时间】:2009-02-18 00:23:42
【问题描述】:

我创建了一个对话框(cMyDialog)。我打算复制 cMyDialog 并将其命名为 cMyDialog2。如何在 MFC 中进行继承?我希望 cMyDialog2 从 cMyDialog1 继承所有 IDD,这样我就不必将代码从 cMyDialog1 复制并粘贴到 cMyDialog2。 cMyDialog2 的目的是继承 cMyDialog1 的所有功能,并在其中添加一些额外的功能。


非常感谢您的回复。我不太确定 IMPLEMENT_DYNAMIC。下面是我的代码的简短 sn-p。如果我误解了宏,请您检查一下并帮助我吗?

// cMyDialog1.cpp : implementation file

cMyDialog1::cMyDialog1(void * pMsgData, CWnd* pParent /*=NULL*/): CDialog(cMyDialog1::IDD, pParent)

{ //codes....
}

BOOL cMyDialog1::OnInitDialog() 

{
    CDialog::OnInitDialog();
...
}


//cMyDialog2.cpp

cMyDialog2::cMyDialog2(void * pMsgData, CWnd* pParent /*=NULL*/)
    : CMyDialog1(cMyDialog2::IDD, pParent)

{ //codes....
   IMPLEMENT_DYNAMIC(cMyDialog2, cMyDialog1)
}

我可以通过DECLARE_DYNAMICIMPLEMENT_DYNAMIC 方法从CMyDialog 继承。非常感谢您的帮助,亚当。

但我无法解决问题的第二部分。我想在子对话框CMyDialog1中添加一些额外的功能,例如添加“另存为”按钮,但我无法做到。是因为 CMyDialog1 是从 CMyDialog 继承的对话框,因此我无法添加新功能吗?如何在继承对话框中添加新功能?

【问题讨论】:

    标签: inheritance mfc dialog


    【解决方案1】:

    是的,您可以从 CDialog 派生类继承。您只需要添加一些宏,如 DECLARE_DYNAMIC 和其他一些宏来满足 MFC。这是一个例子。您可以以此为起点:

    在.h文件中:

    class cMyDialog2
      : public cMyDialog
    {
      DECLARE_DYNAMIC(cMyDialog2)
    
    pulic:
      cMyDialog2();
      virtual ~cMyDialog2();
    
    protected:
      DECLARE_MESSAGE_MAP()
    };
    

    .cpp 文件中:

    #include "cMyDialog2.h"
    
    IMPLEMENT_DYNAMIC(cMyDialog2, cMyDialog)
    
    BEGIN_MESSAGE_MAP(cMyDialog2, cMyDialog)
    END_MESSAGE_MAP()
    
    cMyDialog2::cMyDialog2()
    {
    }
    
    ...etc.
    

    【讨论】:

      【解决方案2】:

      这可能被视为 Adam Piece 答案的附录。从另一个对话框派生时,了解DoDataExchange() 的角色也很重要。派生类 (cMyDialog2) 不应实现此函数,或者如果已实现(推荐)它应该调用它的基本版本,如下所示:

      void cMyDialog2::DoDataExchange(CDataExchange* pDX)
      {
          CDialog::DoDataExchange(pDX);
          cMyDialog::DoDataExchange(pDX);
      }
      

      如果没有正确完成,对话框上的控件将不会被创建,并且对话框可能会在调用/执行时崩溃。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-05
        • 1970-01-01
        相关资源
        最近更新 更多