由于有一些共同的控件及相应的操作,我想把其作为其类,其它子类直接用该基类中的控件及方法,
在delphi中很好实现的问题,在VC中不知如何实现,我已经做了如下工作:
从CDialog中定义了一个对话框,具体定义如下:
class : public CDialog
{
// Construction
public:
BaseDlg(UINT id = NULL,CWnd* pParent = NULL); // standard constructor// Dialog Data
//{{AFX_DATA(BaseDlg)
CProgressCtrl m_Progress;
CComboBox m_SecondIL;
CComboBox m_FirstIL;
BOOL m_bSupport;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(BaseDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL// Implementation
public:
void SetBtuHardType(int nHardType);
private:
CString GetILFile(int nPos);
void SetSecondPos(int nPos);
CString m_strFirstILFile;
CString m_strSecondILFile;
int m_nHardType;
protected: // Generated message map functions
//{{AFX_MSG(BaseDlg)
virtual BOOL OnInitDialog();
afx_msg void OnCloseupCbFirstIL();
afx_msg void OnCloseupCbSecondIL();
afx_msg void OnSupportAnother();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};把类中的enum { IDD = IDD_DIALOGBASE };语句去掉了。我定义了两个子对话框,先是从CDialog中继承,生成了相应的新类后,我在头文件和CPP文件中把所有的CDialog改成了CBaseDlg编译连接通过。在一个按钮中调用如下代码:
CCalibrateDlg CalibrateDlg;
CalibrateDlg.DoModal();运行后出现如下异常:
异常内容如下:
Debug Assertion Failed!
File:dlgdata.cpp
line:43开始以为要创建,用下面的方法
CCalibrateDlg *pCalibrateDlg = new CCalibrateDlg(this);
pCalibrateDlg->DoModal();
出现相同的异常,不知这是为什么,请高手指点!!!!
在delphi中很好实现的问题,在VC中不知如何实现,我已经做了如下工作:
从CDialog中定义了一个对话框,具体定义如下:
class : public CDialog
{
// Construction
public:
BaseDlg(UINT id = NULL,CWnd* pParent = NULL); // standard constructor// Dialog Data
//{{AFX_DATA(BaseDlg)
CProgressCtrl m_Progress;
CComboBox m_SecondIL;
CComboBox m_FirstIL;
BOOL m_bSupport;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(BaseDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL// Implementation
public:
void SetBtuHardType(int nHardType);
private:
CString GetILFile(int nPos);
void SetSecondPos(int nPos);
CString m_strFirstILFile;
CString m_strSecondILFile;
int m_nHardType;
protected: // Generated message map functions
//{{AFX_MSG(BaseDlg)
virtual BOOL OnInitDialog();
afx_msg void OnCloseupCbFirstIL();
afx_msg void OnCloseupCbSecondIL();
afx_msg void OnSupportAnother();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};把类中的enum { IDD = IDD_DIALOGBASE };语句去掉了。我定义了两个子对话框,先是从CDialog中继承,生成了相应的新类后,我在头文件和CPP文件中把所有的CDialog改成了CBaseDlg编译连接通过。在一个按钮中调用如下代码:
CCalibrateDlg CalibrateDlg;
CalibrateDlg.DoModal();运行后出现如下异常:
异常内容如下:
Debug Assertion Failed!
File:dlgdata.cpp
line:43开始以为要创建,用下面的方法
CCalibrateDlg *pCalibrateDlg = new CCalibrateDlg(this);
pCalibrateDlg->DoModal();
出现相同的异常,不知这是为什么,请高手指点!!!!
解决方案 »
- 初学者的疑问!!(在线等)
- 为对话框中的两个edit关联了Cstring变量,但只对一个赋值,然后UpdateData(false),但两个edit都有值了,why??
- 谁有关于snmp中响应trap信息的源代码?
- 怎样将注册的文件类型删除?
- 帮帮忙啊,那位大侠能帮帮忙啊!!!!!!!!!!!!!!!!!!!!!!
- 如何将结构传给unsigned char*指针呢?急急急!
- 用不同颜色和属性的线画的曲线怎么一刷新就全变为系统默认的黑线,而且文本什么的再也显示不了,字体变样,其他窗口打开全黑
- Windows系统编程高手请进
- 求助:两个工程合并到一个解决方案中,相互调用时出现链接错误??
- VC如何读取datagrid中的数据
- 如何获取系统当前字体
- 如何在Windows下实现PV操作
这里通过枚举,和资源关联,那你这个对话框类和哪个对话框资源关联???
class CCalibrateDlg : public BaseDlg
{
// Construction
public:
CCalibrateDlg(CWnd* pParent = NULL); // standard constructor// Dialog Data
//{{AFX_DATA(CCalibrateDlg)
enum { IDD = IDD_DIALOGCALIBRATE };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CCalibrateDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL// Implementation
protected: // Generated message map functions
//{{AFX_MSG(CCalibrateDlg)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
????class CBaseDlg: public CDialog
{
DECLARE_DYNAMIC(CBaseDlg)public:
CDatabaseDialog(UINT nID,CWnd* pParent = NULL); // 标准构造函数
...IMPLEMENT_DYNAMIC(CBaseDlg, CDialog)
CBaseDlg::CBaseDlg(UINT nID,CWnd* pParent /*=NULL*/)
: CDialog(nID, pParent)
{
}
:CBaseDlg(IDD,pParent)
{
}这样即可。
子类的实现代码如下:
CCalibrateDlg::CCalibrateDlg(CWnd* pParent /*=NULL*/)
: BaseDlg(CCalibrateDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCalibrateDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CCalibrateDlg::DoDataExchange(CDataExchange* pDX)
{
BaseDlg::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCalibrateDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCalibrateDlg, BaseDlg)
//{{AFX_MSG_MAP(CCalibrateDlg)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
等待中.....
基类中不要把enum { IDD = IDD_BASEDLG };语句去掉
子类中把CDialog全部改为基类
同时子类的构造函数把 子类名::IDD去掉即可,
谢谢大家的帮助。