现在的位置: 首页 > 综合 > 正文

在MFC类中各种类的指针的获取和应用

2018年02月08日 ⁄ 综合 ⁄ 共 1393字 ⁄ 字号 评论关闭

于MFC下的文档和视图以及框架之间的访问, 这些问题已经是老生常谈了,但我觉得还是都没有详细的说明,特

别是对于英语较差的人,我查看了一些blog,总结了一下!希望对和我一样的人有点帮助!
 一:
      1:   因为对于SDI程序,主框架窗口就是文档框窗(如果这个也不知道,就要查看一下MFC下的单文档的构成原理了).
          下面所说的是关于单文档的.          
         
        例子:  在CMainFrame框架中如何得到视图类的指针.
                    可以 先得到框架指针,然后调用 GetActiveView 函数指向当前活动视.
 
       C **View  * pView;
                  pView=(C**View*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveView();

          当然这些也许都知道是这么用的,但真正的m_pMainWnd和AfxGetApp()是什么意思也许有的人不明白.
         大家也许都知道如何在App中获得MainFrame指针(框架类):  CWinApp 中的 m_pMainWnd变量就是CMainFrame的指针.

   所以在别的类下也可以先得到m_pMainWnd,就得到了MainFrame的指针. 所以得到视图类的指针,必先 得到CFrameWnd的指针m_pMainWnd,然后在调用FrameWnd下的GetActiveView 就指向当前活动视.
    m_pMainWnd的由来:
      每一个MFC应用程序都有一个CWinApp派生类的对象。这个对象对应着程序的主线程。而 CWinApp 类中有一个 CWnd * m_pMainWnd 成员变量。这个成员变量记录了应用程序的主窗口。
    当你新建一个MFC应用程序的时候,在 InitInstance虚函数里都会出现对 m_pMainWnd 赋值的语句.唯一的例外是单文档界面的MFC应用程序,你无法在 InitInstance 函数里看到这段代码,因为它已经被隐藏在 ProcessShellCommand 这个函数里了。由此你就可以下结论了:只要创建自己的窗口类,就要把这个类的对象赋值给 m_pMainWnd .而这个成员只能在C**APP类中才可以使用,所以怎样使用这个CWinApp类里的CWnd 类型的变量来得到主框架窗口的指针呢??
    AfxGetApp函数才可以 , 因为AfxGetApp()得到的是CWinApp类的对象,且AfxGetApp返回值为CWinApp对象指针,就是MFC生成的C**App.cpp中定义的那个对象(对象theApp的指针)。
 
    因为你是在自己创建的项目中得到CWndApp成员函数或者成员变量,所以你必须强制转换为你自己的项目中的类,才能找到成员函数或者变量.
 注:  在单文档中,获得视指针的最简单的方法还是
 ((C**View *)CFrameWnd::GetActiveView())
             
          2:     当然在FrameWnd中也可以得到文档类的指针:
                       CMyDocument
 

 

更多技术文章请参看施昌权的个人网站: http://www.joyvc.cn

 

抱歉!评论已关闭.