刚做MFC不久,有个问题问一下
一半继承CDialog的类构造函数都会如下写发:
class CCDCFDlg : public CDialog
现在我这个类要接受一个参数,我要写一个带参数的构造函数class CCDCFDlg(/*这里有个参数 是指针*/)这样还能继承CDialog吗 好像写成class CCDCFDlg(/*这里有个参数 是指针*/):CDialog会报错不写:CDialog的话有蛇什么影响?

解决方案 »

  1.   

    构造函数的参数不是在这里写
    你继承之后,MFC已经为你添加了一个构造函数CCDCFDlg()
    这时,你再重载一个有参数的版本CCDCFDlg(Type parm....)
    记得在类定义中声明这个构造函数
    然后再对应的cpp文件中实现这个构造函数
      

  2.   

    类名字后面能跟构造参数,真的有点神奇,但是我没有这样的用过。
    CCDCFDlg ((/*这里有个参数 是指针*/)这个带参数的构造函数是类的成员函数,要写在类里面的。这样写CCDCFDlg: public CDialog
    {
       CCDCFDlg((/*这里有个参数 是指针*/);//带参数的构造函数
       CCDCFDlg();无参数的构造函数}
      

  3.   

    把这个放到类定义里
    CCDCFD(CString str, CWnd* pParent = NULL);
    把这个放到对应的cpp里
    CCDCFD::CCDCFD(CString str, CWnd* pParent /*=NULL*/)
    : CDialog(CCDCFD::IDD, pParent)
    {
    MessageBox(str);
    }
    再做个按钮消息响应函数
    void CDlgTestDlg::OnButton1() 
    {
    CCDCFD dlg("MyDialog");
    dlg.DoModal();
    }
    我试过了,没问题的
      

  4.   

    传递参数有很多种方法:
    比如增加一个函数或设置公开变量等!使用构造函数也可以。下面将个例子
    CMeasureReportDlg从CDialog派生头文件
    CMeasureReportDlg(CWnd* pParent /*=NULL*/);
    CPP文件
    CMeasureReportDlg::CMeasureReportDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CMeasureReportDlg::IDD, pParent)现在我们要修改其构造函数希望传一个对话框的高度参数 
    在头文件
    CMeasureReportDlg(int nHeight,CWnd* pParent /*=NULL*/);
    private:
         int m_nHeight;//用来保存高度变量
    cpp
    CMeasureReportDlg::CMeasureReportDlg(int nHeight,CWnd* pParent /*=NULL*/)
    : CDialog(CMeasureReportDlg::IDD, pParent)
    ,m_nHeight(nHeight)