转自: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. 【vijos】1790 拓扑编号(拓扑+贪心)

    https://vijos.org/p/1790 好神的贪心题.. 一开始我也想到了贪心,但是是错的..sad 就是因为每一个节点的编号与逆图的子树有关,且编号一定是>=子树的儿子+1的.但是想 ...

  2. 【BZOJ】2018: [Usaco2009 Nov]农场技艺大赛(暴力)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2018 精度问题我也是醉了.. #include <cstdio> #include &l ...

  3. 客户端用JavaScript填充DropDownList控件 服务器端读不到值

    填充没有任何问题,但是在服务器端却取不出来下拉表中的内容.页面代码如下. <form id="form1" runat="server"> < ...

  4. uGUI动态加载控件位置错误

    最近在使用uGUI时遇到了一个问题,在此记录一下.在Canvas的Render Mode设置为Screen Space-Overlay模式时,动态加载控件是不会发生问题的.但是在Screen Spac ...

  5. Sublime Text 格式化代码快捷键

    首选项->按键绑定-用户 加入代码: {"keys": ["ctrl+alt+j"], "command": "reinde ...

  6. html 复选框(checkbox)和单选框(radio)与文字水平垂直居中对齐

    对 input与label同时设置CSS input,label{ vertical-align:middle; }

  7. C++ 分割字符串两种方法

    原文地址:http://blog.csdn.net/xjw532881071/article/details/49154911 字符串切割的使用频率还是挺高的,string本身没有提供切割的方法,但可 ...

  8. python 之 多进程

    阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiprocessingpython中的多线程 ...

  9. ilbc编解码在android实现

    iLBC 是为专为提供稳健的 IP 语音通信而开发的语音 codec,以窄带语音为设计基础,具有 8 kHz 的采样率.iLBC codec 支持两种基本的帧长度:13.3 kbps 比特率下编码帧长 ...

  10. 大数据技术大合集:Hadoop家族、Cloudera系列、spark、storm【转】

    大数据我们都知道hadoop,可是还会各种各样的技术进入我们的视野:Spark,Storm,impala,让我们都反映不过来.为了能够更好 的架构大数据项目,这里整理一下,供技术人员,项目经理,架构师 ...