SDI程序中有一个简单的对话框,显示一些基本设置。调整设置后点击对话框上的按钮时,希望Doc类数据更新,然后进行相应的操作。由于这个对话框是由CDialog类继承的,无法获得Doc类的指针,因此不知如何处理。    望不吝赐教,多谢!

解决方案 »

  1.   

    .h:class CYourDoc;
    class CDlg : public CDialog
    {
    DECLARE_DYNAMIC(CDlg)public:
    CDlg(CWnd* pParent = NULL);   // 标准构造函数
    CDlg(CYourDoc *pDoc, CWnd* pParent = NULL);
    virtual ~CDlg();
    CYourDoc *m_pDoc;// 对话框数据
    enum { IDD = IDD_DIALOG1 };protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持 DECLARE_MESSAGE_MAP()
    };.cpp:
    添加
    CDlg::CDlg(CYourDoc *pDoc, CWnd* pParent /*=NULL*/)
    : CDialog(CDlg::IDD, pParent)
    {
       m_pDoc = pDoc;
    }
      

  2.   

    由于这个Dlg的指针是在Doc中定义的,所以doc.h中已经包含了dialog.h,这导致了我无法在dialog.h中又包含doc.h,而这里只是声明了这个类型。    结果就是在dialog.cpp中调用m_pDoc->Func()的时候,告诉我没有定义这个函数
        error C2027: use of undefined type 'CPointViewer2Doc'
            e:\work\program\vc6\pointviewer2\dlgselectclu.h(13) : see declaration 
            of 'CPointViewer2Doc'    怎么处理才好?多谢了!
      

  3.   

    最后在dialog.cpp里面包含了doc.h
    虽然个人觉得风格不太好,但也只好这样了。
      

  4.   

    如果有Doc指针的话,定义一个用户消息,当需要更新时给Doc对象peek一个message,在Doc里面用消息函数处理