none
如何在自己定义的类中得到文档类的指针呢? RRS feed

  • 问题

  • 如何在自己定义的类中得到文档类的指针呢?

    直接定义CReadMifDoc* pDoc = GetDocument();
    好像不可以啊。
    高手赐教哦。
    2009年3月5日 16:23

答案

  •   -if   SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()  
      -if   MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()  

    湖北武汉
    • 已标记为答案 beyard 2009年3月8日 4:45
    2009年3月6日 10:43
  • 如果你的类的对象和doc对象不会同时在作用域,那么你创建文档之后需要把doc的地址保存下来供以后使用。举例来说CView中有一个doc的指针类型的成员变量,在doc和对象都在作用域之内的时候(比如CDocument::AddView)将doc的地址保存下来供以后使用。如果你的对象是在CView的成员函数中创建,那么你可以将CView中保存的doc的地址复制一份自己用。
    MSMVP VC++
    • 已标记为答案 beyard 2009年3月7日 8:00
    2009年3月6日 18:24
    版主

全部回复

  • 你在你的类外面把CDocument的指针传到类里面就行了。否则你的类必须继承CDocument,不然是没有那个函数的。
    Hello world
    2009年3月6日 1:54
    版主
  •  请问 ,怎么传进去呀?
    2009年3月6日 3:42
  • 可以定义个全局变量CReadMifDoc* pDoc,在CReadMifDoc初始化时对该指针进行赋值
    2009年3月6日 6:07
  •   -if   SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()  
      -if   MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()  

    湖北武汉
    • 已标记为答案 beyard 2009年3月8日 4:45
    2009年3月6日 10:43
  • 如果你的类的对象和doc对象不会同时在作用域,那么你创建文档之后需要把doc的地址保存下来供以后使用。举例来说CView中有一个doc的指针类型的成员变量,在doc和对象都在作用域之内的时候(比如CDocument::AddView)将doc的地址保存下来供以后使用。如果你的对象是在CView的成员函数中创建,那么你可以将CView中保存的doc的地址复制一份自己用。
    MSMVP VC++
    • 已标记为答案 beyard 2009年3月7日 8:00
    2009年3月6日 18:24
    版主
  • 好像还不可以,能不能具体点呢?
    2009年3月7日 13:37
  • 参考MFC文档中的DrawCli示例
    MSMVP VC++
    2009年3月7日 13:43
    版主
  • 这个没用呢
    2009年3月7日 13:44
  • 这个例子在哪里?
    谢谢
    2009年3月7日 13:55
  • 例子还是没有啊?
    大哥能不能帮忙,很急呢

    我定义了一个 CBook 的类 派生于 CObject,
    需要调用 pDoc 指针,怎么办?
    AfxGetMainWnd()->GetActiveView()->GetDocument()  
    根本就不可以啊
    2009年3月7日 14:03
  • 在MSDN里面找。
    MSMVP VC++
    2009年3月7日 14:37
    版主
  • 还是没用
    2009年3月7日 15:02
  • //test for beyard
     //工程为单文档   工程名为viewclasscall

    #include "viewclasscall_demoDoc.h"  //派生自CDocment
    #include "MainFrm.h"

    CBook::CBook(void)
    {
        //AfxGetMainWnd()->GetActiveView()->GetDocument()  
     CMainFrame *pMainWnd = (CMainFrame *)AfxGetMainWnd();

     if (pMainWnd )
     {
      Cviewclasscall_demoDoc * pDoc = (Cviewclasscall_demoDoc *)pMainWnd->GetActiveView()->GetDocument();
     }
    }


    湖北武汉
    2009年3月11日 10:45