转自: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. 关于JSON日期格式显示及My97日期控件

    1.My97日期控件.显示不同的日期格式,可以调整"dateFmt“的参数来配置: 详细DEMO:http://www.my97.net/demo/index.htm <p>日期 ...

  2. hdu 5078

    Osu! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Sub ...

  3. Unity3D必备知识: 物理学公式

    一.质点的运动(1)——直线运动 1)匀变速直线运动 1.平均速度V=s/t(定义式) 2.有用推论Vt*Vt-Vo*Vo=2as 3.中间时刻速度Vt/2=V平=(Vt+Vo)/2 4.末速度Vt= ...

  4. 好用的 Visual Studio插件

    Image Optimizer(图片优化)插件 使用行业标准优化任何JPEG,PNG和gif(包括动画gif).可以做有损和无损的优化.

  5. map实现

    /*PLSQL实现Map*/ --建立序列create sequence seq_map_param_id ;--建立参数表create table map_param(id number prima ...

  6. iOS开发之 -- 判断tableview/scrollview的滑动方法,及导航栏渐变的实现代码

    开发的过程中,肯定会用到在视图想上滑动的时候,在导航处做一些操作,比如向上滑动的时候,做个动画,出现一个搜索框,或者其他的操作,那么我们怎么来判断它的滑动方向呢? 首先我们应该知道tableview继 ...

  7. 面试题思考:IOC的优缺点

    先讲重点  面试时怎么答: 先把IOC的概念说出来 依赖注入和控制反转 所谓的依赖注入是甲方开放接口,在它需要的时候,能够将乙方传递进来(注入):所谓的控制反转,甲乙双方不相互依赖,交易活动的进行不依 ...

  8. <转>RestKit在iOS项目中的使用,包含xcode配置说明

    本文转载至 http://www.cnblogs.com/visen-0/archive/2012/05/03/2480693.html 最近在iPhone工程中添加RestKit并编译,但是由于之前 ...

  9. MATLAB使用fft求取给定音频信号的频率

    一段10s立体声音频,采样率位8000Hz,已知频率为1000Hz clc; clear; [data, Fs] = audioread('1khz_stereo_8000.wav'); fs=Fs; ...

  10. c++ new(不断跟新)

    1.基础知识 /* 可以定义大小是0的数组,但不能引用,因为没有指向任何对象 new string[10]调用类的默认构造函数 new int[10]没有初始化,但new int[10]()会将数组初 ...