希望在写一个对话框公用父类,然后在其它地方继承它
我在vc6.0资源面板的Dialog文件夹里插入了了一个对话框,ID为IDD_DIALOG1,并在它基础上建了一个对话框类,名为CTemplate,基类是CDialog,头文件中的语句如下:
class CTemplate : public CDialog
{
public:
CTemplate(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CTemplate)
enum { IDD = IDD_DIALOG1 };
我在CTemplate里添加了几个消息函数。我在资源面板里又插入了一个对话框,ID为IDD_DIALOG2,界面比IDD_DIALOG1多了几个控件。下面我想建立一个基于IDD_DIALOG2的对话框类CMyDialog2,它的界面和IDD_DIALOG2一样,而又继承了CTemplate的消息函数,就是不用重新编写CTemplate中的消息函数了,即把CTemplate类当作CMyDialog2的父类!请问如何能实现?
class CMyDialog2 : public CTemplate
————————————————————
编译时提示CMyDialog2构造函数'{'那一行错误,错误信息为:error C2614: 'CMMyDialog2' : illegal member initialization: 'CDialog' is not a base or member
goodboyws(深夜不眠者(VCMVP)):
CTemplate里去掉
enum { IDD = IDD_DIALOG1 };
这个类不需要ID
___________________
去掉那一行编译时CTemplate构造函数: CDialog(CTemplate::IDD, pParent)那一行错误,错误信息为:error C2039: 'IDD' : is not a member of 'CTemplate'
error C2065: 'IDD' : undeclared identifier
-------->解决方案
/* LDCControlDialog.h */
class AFX_EXT_CLASS CLDCControlDialog : public CDialog
{
DECLARE_DYNAMIC(CLDCControlDialog)
public:
CLDCControlDialog(UINT nTemplate, CWnd* pParent = NULL); !!!// 标准构造函数
virtual ~CLDCControlDialog();
// 对话框数据
// enum { IDD = IDD_LDCCONTROLDIALOG }; !!!
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
virtual void SetDlgAttFromCtrl(const CLDCControl40 *pCtrl);
virtual void SetCtrlAttFromDlg(CLDCControl40 *pCtrl);
DECLARE_MESSAGE_MAP()
};
/* LDCControlDialog.cpp */
// CLDCControlDialog 对话框
IMPLEMENT_DYNAMIC(CLDCControlDialog, CDialog)
CLDCControlDialog::CLDCControlDialog(UINT nTemplate, CWnd* pParent)!!!
: CDialog(nTemplate, pParent)!!!
{
}
CLDCControlDialog::~CLDCControlDialog()
{
}
void CLDCControlDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CLDCControlDialog, CDialog)
END_MESSAGE_MAP()
// CLDCControlDialog 消息处理程序
void CLDCControlDialog::SetDlgAttFromCtrl(const CLDCControl40 *pCtrl)
{
}
void CLDCControlDialog::SetCtrlAttFromDlg(CLDCControl40 *pCtrl)
{
}