获得MFC窗口其它类指针的方法

获得MFC窗口其它类指针的方法

获得CWinApp

  1. -CMainFrameCChildFrameCDocumentCView中直接调用AfxGetApp()或用theApp
  2. -在其它类中只能用AfxGetApp()

获得CMainFrame

  1. -CMinApp中用AfxGetMainWnd()或者m_pMainWnd
  2. -CChildFrame中可用GetParentFrame()
  3. -在其它类中用AfxGetMainWnd()

获得CChildFrame

  1. -CView中用GetParentFrame()
  2. -CMainFrame中用MDIGetActive()GetActiveFrame()
  3. -在其它类中用AfxGetMainWnd()->MDIGetActive()AfxGetMainWnd()->GetActiveFrame()

获得CDocument

      1. -CView中用GetDocument()
      2. -CChildFrame中用GetActiveView()->GetDocument()
      3. -CMainFrame中用
        -if SDIGetActiveView()->GetDocument()
        -if MDIMDIGetActive()->GetActiveView()->GetDocument()
      4. -在其它类中
        -if SDIAfxGetMainWnd()->GetActiveView()->GetDocument()
        -if MDIAfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()

获得CView

  1. -CDocument POSITION pos = GetFirstViewPosition();GetNextView(pos)
  2. -CChildFrame GetActiveView()
  3. -CMainFrame
    -if SDIGetActiveView()
    -if MDIMDIGetActive()->GetActiveView()
  4. -在其它类中
  5. -if SDIAfxGetMainWnd()->GetActiveView()
    -if MDIAfxGetMainWnd()->MDIGetActive()->GetActiveView()

不过要注意在doc中要取得view的指针C*View要注意类C*View声明的问题,因为默认情况下,MFC*View.h中已经包含了*Doc.h,如果在*Doc.h中包含*View.h,就会引起嵌套包含问题,这样要在*Doc.h中加入 class C*View;而在*Doc.cpp中加入 #include "*View.h"

其实完全可以在CYourApp中添加各种视或文档的指针,在那些视或文档初始化的时候将指针传给CYourApp中的对应变量,这样以后不管在哪用上面指针只需(CYourApp*)AfxGetApp()取其属性变量即可,明了而且清楚更是方便我一直专门操作的说)

在何时何地,你都可以通过以下方法精确的得到任何一个对象(ApplicationDocTemplate,DocumentView,Frame

  1. 通过AfxGetApp()得到当前的App对象;
  2. 通过AfxGetMainWnd()得到主窗口;
  3. 通过CMDIFrameWnd::GetActiveFrame得到当前活动窗口;
  4. 通过GetNextWindow()遍例所有的子窗口;(如果要得到你想要的子窗口,可以通过特定的成员变量来标志);
  5. 通过CWinApp::GetFirstDocTemplatePostion()以及CWinApp::GetNextDocTemplate()的组合应用来遍历所有的DocTemplate对象,并且用CDocTemplate::GetDocString()来判断当前得到的文档莫板对象是哪个。
  6. 通过CDocTemplate::GetFirstDocPosition()以及CDocTemplateGetNextDoc()组合来遍历所有的该模板的文档对象,并用CDocument::GetDocTemplate()来得到文档模板,用CDocment::GetTitle() 或者GetPathName()来判断当前的文档是哪个。
  7. 通过CDocuemtGetFirstViewPositon()以及GetNextView()来遍历视图对象,一般通过访问View的成员变量来区别各个视图;通过CView::GetDocument()来得到文档对象;
  8. Frame->View 通过GetActiveView方法;
  9. Frame->Doc:通过GetActiveDocument();
  10. View->FrameGetParentFrame();
  11. View->DocGetDocuemt()//前面已经说了。
  12. Doc->View:前面说了;
  13. Doc->Frame:不知道有没有很直接的方法。

MFC应用程序中指针的使用

  1. View中获得Doc指针
  2. App中获得MainFrame指针
  3. View中获得MainFrame指针
  4. 获得View(已建立)指针
  5. 获得当前文档指针
  6. 获得状态栏与工具栏指针
  7. 获得状态栏与工具栏变量
  8. Mainframe获得菜单指针
  9. 在任何类中获得应用程序类
  10. 从文档类取得视图类的指针(1)
  11. App中获得文档模板指针
  12. 从文档模板获得文档类指针
  13. 在文档类中获得文档模板指针
  14. 从文档类取得视图类的指针(2)
  15. 从一个视图类取得另一视图类的指针

VC中编程对于刚刚开始学习的同学,最大的障碍和问题就是消息机制和指针获取与操作。其实这些内容基本上是每本VC学习工具书上必讲的内容,而且通过MSDN很多问题都能解决。一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针获取和操作问题。下面这节内容主要是一般的框架,然后再讲多线程中的指针使用。使用到的类需要包含响应的头文件。首先一般获得本类(视,文档,对话框都支持)实例指针this,用this的目的,主要可以通过类中的函数向其他类或者函数中发指针,以便于在非本类中操作和使用本类中的功能。

  1. View中获得Doc指针 CYouSDIDoc *pDoc=GetDocument();一个视只能有一个文档。
  2. App中获得MainFrame指针
  3. CWinApp 中的 m_pMainWnd变量就是MainFrame的指针,也可以: CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd();
  4. View中获得MainFrame指针 CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
  5. 获得View(已建立)指针 CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
    CyouView *pView=(CyouView *)pMain->GetActiveView();
  6. 获得当前文档指针 CDocument * pCurrentDoc =(CFrameWnd *)m_pMainWnd->GetActiveDocument();
  7. 获得状态栏与工具栏指针 CStatusBar * pStatusBar(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值