转自:http://tieba.baidu.com/p/252804018

访问应用程序的其它类 
获得CWinApp: 
-在CMainFrame,CChildFrame,CDocument,CView中直接调用AfxGetApp()或用theApp 
-在其它类中只能用AfxGetApp() 
获得CMainFrame: 
-在CMinApp中用AfxGetMainWnd()或者m_pMainWnd 
-在CChildFrame中可用GetParentFrame() 
-在其它类中用AfxGetMainWnd() 
获得CChildFrame: 
-在CView中用GetParentFrame() 
-在CMainFrame中用MDIGetActive()或GetActiveFrame() 
-在其它类中用AfxGetMainWnd()->MDIGetActive()或AfxGetMainWnd()->GetActiveFrame() 
获得CDocument: 
-在CView中用GetDocument() 
-在CChildFrame中用GetActiveView()->GetDocument() 
-在CMainFrame中用 
-if SDI:GetActiveView()->GetDocument() 
-if MDI:MDIGetActive()->GetActiveView()->GetDocument() 
-在其它类中 
-if SDI:AfxGetMainWnd()->GetActiveView()->GetDocument() 
-if MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument() 
获得CView: 
-在CDocument中 POSITION pos = GetFirstViewPosition();GetNextView(pos) 
-在CChildFrame中 GetActiveView() 
-在CMainFrame中 
-if SDI:GetActiveView() 
-if MDI:MDIGetActive()->GetActiveView() 
-在其它类中 
-if SDI:AfxGetMainWnd()->GetActiveView() 
-if MDI:AfxGetMainWnd()->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()取其属性变量即可,明了而且清楚更是 
方便我一直专门操作的说:) 
////////////////////////////////////////////////////////////////// 
我先抛块砖,有玉的砸过来! 
在何时何地,你都可以通过以下方法精确的得到任何一个对象(Application,DocTemplate,Document,View,Frame) 
1。通过AfxGetApp()得到当前的App对象; 
2。通过AfxGetMainWnd()得到主窗口; 
3。通过CMDIFrameWnd::GetActiveFrame得到当前活动窗口; 
4。通过GetNextWindow()遍例所有的子窗口;(如果要得到你想要的子窗口,可以通过特定的成员变量来标志); 
5。通过CWinApp::GetFirstDocTemplatePostion()以及CWinApp::GetNextDocTemplate()的组合应用来遍历所有的DocTemplate对象,并且用CDocTemplate::GetDocString()来判断当前得到的文档莫板对象是哪个。 
6。通过CDocTemplate::GetFirstDocPosition()以及CDocTemplate的GetNextDoc()组合来遍历所有的该模板的文档对象,并用CDocument::GetDocTemplate()来得到文档模板,用CDocment::GetTitle() 或者GetPathName()来判断当前的文档是哪个。 
7。通过CDocuemt的GetFirstViewPositon()以及GetNextView()来遍历视图对象,一般通过访问View的成员变量来区别各个视图;通过CView::GetDocument()来得到文档对象; 
8。Frame->View: 通过GetActiveView方法; 
9。Frame->Doc:通过GetActiveDocument(); 
10。View->Frame:GetParentFrame(); 
11。View->Doc:GetDocuemt()//前面已经说了。 
12。Doc->View:前面说了; 
13。Doc->Frame:不知道有没有很直接的方法。

关于获得MFC窗口其它类指针的方法(csdn)的更多相关文章

  1. VS2010 MFC中 在FormView派生类里获取文档类指针的方法

    经过苦苦调试,今晚终于解决了一个大问题. 我想要实现的是:在一个FormView的派生类里获取到文档类的指针. 但是出现问题:试了很多办法,始终无法获取到. 终于,此问题在我不懈地调试加尝试下解决了. ...

  2. MFC关于多线程中传递窗口类指针时ASSERT_VALID出错的另类解决 转

    MFC关于多线程中传递窗口类指针时ASSERT_VALID出错的另类解决   在多线程设计中,许多人为了省事,会将对话框类或其它类的指针传给工作线程,而在工作线程中调用该类的成员函数或成员变量等等. ...

  3. MFC类中获得其它类指针

    当用VC++的Application Wizard生成除了CDialog Basiced以外的应用程序时,将自动产生视图类.文档类.主帧窗口类.应用程序类等等.一般来说,程序的核心数据及操作在文档类中 ...

  4. MFC中获取App,MainFrame,Doc和View类等指针的方法

    From: http://hi.baidu.com/wxnxs/item/156a68f5b3b4ed18e3e3bd03   MFC中获取App,MainFrame,Doc和View类等指针的方法 ...

  5. MFC窗口重绘

    Invalidate()与 UpdateAllViews()有什么分别 Invalidate()是让程序重画窗口. UpdateAllViews()是在DOC/VIEW结构中, 当一个视图的数据改变后 ...

  6. MFC窗口分割以及各窗口间的通讯

    一个偶然的机会又重新接触了MFC窗口的分割,自己结合资料重新写了一个窗口分割的程序,现将具体流程跟大家分享一下: 1.我们先创建一个MFC单文档类的程序,具体分割方式先将单文档整个客户区分成两行一列, ...

  7. MFC中 自定义类访问主对话框控件的方法

    之前一直在找有木有好点的方法.现在终于被我找到,收藏之~~~~~~ 在使用mfc的时候经常遇到自定义类访问主对话框控件的问题,例如自定义类中的方法要输出一段字符串到主对话框的EDIT控件.控制对话框的 ...

  8. MFC中获得各种指针概述(个人觉得是很重要的重点)

    前言:这学期学习MFC(有点过时的东西),上课时,老师讲到获取当前活动指针,获取视图指针,文档指针,文档模板指针等(已晕) 后来下来真正写代码的时候发现这些几乎都是需要用到的东西,所以特此记录下,让自 ...

  9. MFC 窗口分割与通信

    一.关于CSplitterWnd类我们在使用CuteFtp或者NetAnt等工具的时候,一般都会被其复杂的界面所吸引,在这些界面中窗口被分割为若干的区域,真正做到了窗口的任意分割. 那么我们自己如何创 ...

随机推荐

  1. 从TensorFlow0.12升级到TensorFlow1.13

    sudo pip install --upgrade tensorflow-gpu $ sudo pip install --upgrade tensorflow-gpu[sudo] password ...

  2. js json ie不支持json

    JSON是包含在JScript 5.8中,而为了向下兼容ie8只有在文档模式是”Internet Explorer 8 Standards”的时候才使用JScripte 5.8,其他时候使用JScri ...

  3. Docker入门与应用系列(七)Docker图形界面管理之DockerUI

    1.dockeruiDockerrUI是一个基于Docker API提供图形化页面简单的容器管理系统,支持容器管理.镜像管理.1.1 下载镜像 docker pull abh1nav/dockerui ...

  4. Docker入门与应用系列(八)Docker图形界面管理之Shipyard

    Shipyard基于Docker API实现的容器图形管理系统,支持container.images.engine.cluster等功能,可满足我们基本的容器部署需求可堆栈的Docker管理基于Doc ...

  5. 解决WAS更新web.xml文件不生效的问题(web_merged.xml是罪魁祸首)

    问题原因分析 近日碰到更新web.xml文件到WAS服务器(WebSphere Application Server 8.5.5.3)后,不生效的问题. 网上找了一圈,基本都是说WAS缓存引起的. 手 ...

  6. 项目分析(GS,NET,NGP关系)

    看了两天,这三者之间的关系好像是这样的,因为GS和net在同一台机器上,所以用共享内存通信,毕竟共享内存通信是最快的进程间通信的方式,而NGP是属于客户端的,Net是属于服务器的,他与Net进程是基于 ...

  7. 【BZOJ5060】魔方国 特判

    [BZOJ5060]魔方国 Description 小奇和魔法猪打开了战狂的遗迹,穿越到了东元20年.东元元年,战狂率领一千万士兵毁灭了一个又一个文明,并建立起了新文明——昌和帝国,招募了八位伟人:大 ...

  8. 《从零开始学Swift》学习笔记(Day60)——Core Foundation框架

    原创文章,欢迎转载.转载请注明:关东升的博客 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Swift中调用这种C语言风 ...

  9. struts2使用jsp和<s:property>标签获取json格式的返回数据

    struts2使用jsp和<s:property>标签获取json格式的返回数据 1.struts2的action中 return "success"; 2.指向的返回 ...

  10. Spring中 PROPAGATION_REQUIRED 解释

    转自:https://blog.csdn.net/bigtree_3721/article/details/53966617 事务传播行为种类 Spring在TransactionDefinition ...