Inheritance 如何继承MFC对话框?

Inheritance 如何继承MFC对话框?,inheritance,mfc,dialog,Inheritance,Mfc,Dialog,我已经创建了一个对话框(cMyDialog)。我计划复制cMyDialog并将其命名为cMyDialog2。如何在MFC中执行继承?我希望cMyDialog2从cMyDialog1继承所有IDD,这样我就不必将代码从cMyDialog1复制并粘贴到cMyDialog2。cMyDialog2的目的是从cMyDialog1继承所有函数,并在其中添加一些额外的函数 非常感谢您的回复。我对机具动力不太确定。下面是我的代码的一小段。如果我误解了宏,你能帮我复习一下吗 // cMyDialog1.cpp

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


非常感谢您的回复。我对机具动力不太确定。下面是我的代码的一小段。如果我误解了宏,你能帮我复习一下吗

// 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\u DYNAMIC
IMPLEMENT\u DYNAMIC
方法从CMyDialog继承。非常感谢你的帮助,亚当


但我无法让问题的第二部分起作用。我想在子对话框CMyDialog1中添加一些额外的函数,比如添加一个“另存为”按钮,但我无法做到。是因为CMyDialog1是从CMyDialog继承的对话框,因此无法添加新函数吗?如何在继承的对话框中添加新函数?

是的,您可以从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.

这可能被视为亚当作品答案的附录。从另一个对话框派生时,了解
DoDataExchange()
的作用也很重要。派生类(cMyDialog2)不应实现此函数,或者如果已实现(建议),则应调用其基本版本,如下所示:

void cMyDialog2::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    cMyDialog::DoDataExchange(pDX);
}
如果未正确执行此操作,则不会创建对话框上的控件,并且在调用/执行时,对话框可能会崩溃