我新建了一个对话框,并为其生成一个新类,是CDialog的派生类。现在我想得到文档类的一个public指针以便在该对话框类中使用。这个文档类就是AppWizard生成的SDI默认的Doc类。想要得到主框架的是用AfxGetMainWnd()函数,在View类中得到文档类用GetDocument()函数,那么在对话框类中想要得到文档类是否有什么函数呢?

解决方案 »

  1.   

    一种办法是:
    CFrameWnd* pMainFrame=(CFrameWnd*)AfxGetMainWnd();
    CFrameWnd* pActiveFrame=pMainFrame->GetActiveFrame();
    CDoument* pActiveDocument=pActiveFrame->GetActiveDocument();
    或者:在对话框类中增加一个成员用来保存doc对象的指针,在构造函数中传入。
      

  2.   

    CMyDoc* pDoc = (CMyDoc*)GetDocument();
      

  3.   

    接 webber84答案,
    if(!pActiveDocument->IsKindOd(RUNTIME_CLASS(CYDoc))
    {
    CYDoc *pDoc=static_cast<CYDoc*>(pActiveDocument);
    //使用
    ,
    .
    .
      

  4.   

    webber84,很感谢。你的方法我试了,已经成功。但是同这个问题相关的是:在CView中得到CDoc指针可以在OnInitDialog中编写代码,那么在CMainFrame类中何时取得CDoc指针合适呢?在OnCreate和OnCreateClient中我都试了不行,取不来。我希望在CView和CMainFrame中都一开始就取到指针,以后可以一直用,直到程序退出。奇怪的是,CDoc应该不是在CMainFrame之前执行吗?为什么在OnCreate函数中无法取到值呢?
      

  5.   

    xuyun11141:你的回复我没有太看明白,我的VC水平还很低呀。能不能说得详细一些,多谢!
      

  6.   

    OnCreate执行的时候Doc还没有构造,当然取不出来了。
      

  7.   

    那么在CMainFrame中没有办法一开始就取到了吗?