1、获取应用程序指针 
CMyApp* pApp=(CMyApp*)AfxGetApp();

2、获取主框架指针 
CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针 
CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd); 
或者 
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();

3、获取菜单指针 
CMenu* pMenu = AfxGetMainWnd()->GetMenu();

4、获取工具栏、状态栏指针 
主框架中可以直接使用m_wndToolBar、m_wndStatusBar 
其他:

CToolBar* pToolBar = (CToolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR); 
CStatusBar* pStatusBar = (CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);

5、获取控件指针 
先用 GetDlgItem() 再转换,如:

CButton* pButton = (CButton*)GetDlgItem(IDC_MYBUTTON);

6、通过框架获取文档、视图指针

SDI: 
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); 
CYourDoc* pDoc = (CYourDoc*)pMainFrame->GetActiveDocument(); 
CYourView* pView = (CYourView*)pMainFrame->GetActiveView();

MDI: 
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); 
CChildFrame* pChildFrame = (CChildFrame*)pMainFrame->GetActiveFrame(); 
CYourDoc* pDoc = (CYourDoc*)pChildFrame->GetActiveDocument(); 
CYourView* pView = (CYourView*)pChildFrame->GetActiveView();

7、文档、视图

从视图获取文档指针: 
CYourDoc* pDoc = GetDocument();

从文档获取视图指针: 
利用成员函数 GetFirstViewPosition() 和 GetNextView() 遍历 
virtual POSITION GetFirstViewPosition() const; 
virtual CView* GetNextView(POSITION& rPosition) const;

SDI: 
CYourView* pView; 
POSITION pos = GetFirstViewPosition(); 
pView = GetNextView(pos);

MDI:

定义函数 
CView* CYourDoc::GetView(CRuntimeClass* pClass)

{

CView* pView; 
    POSITION pos=GetFirstViewPosition(); 
    while(pos!=NULL) 
    { 
        pView=GetNextView(pos); 
         if(!pView->IsKindOf(pClass)) 
             break; 
    } 
    if(!pView->IsKindOf(pClass)) 
    { 
        AfxMessageBox("Connt Locate the View."); 
       return NULL; 
    } 
    return pView; 
}

使用如下: 
CYourView* pView=(CYourView*)GetView(RUNTIME_CLASS(CYourView));

8、文档模版、文档

从文档获取文档模版指针: 
CDocTemplate* GetDocTemplate() const;

从文档模版获取文档指针: 
viaual POSITION GetFirstDocPosition( ) const = 0; 
visual CDocument* GetNextDoc(POSITION & rPos) const = 0;

9、获取分割视图中各个视图的指针

主框架中定义:CSplitterWnd m_wndSplitter;

定义两个View类:CView1、CView2

框架类中重载: 
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT, CCreateContext* pContext) 

    VERIFY(m_splitter.CreateStatic(this,2,1)); //分割成两行一列 
    VERIFY(m_splitter.CreateView(0,0,RUNTIME_CLASS(CView1),CSize(100,100),pContext)); 
    VERIFY(m_splitter.CreateView(1,0,RUNTIME_CLASS(CView2),CSize(100,100),pContext)); 
    return TRUE; 
}

获取分割视图指针 
CView1* pView1 = (CView1*)m_wndSplitter.GetPane(0,0); 
CView2* pView2 = (CView2*)m_wndSplitter.GetPane(1,0);

10、通过鼠标获得子窗口指针

CWnd* ChildWindowFromPoint(POINT point) const; 
CWnd* ChildWindowFromPoint(POINT point,UINT nFlags) const; 
用于确定包含指定点的子窗口 
如果指定点在客户区之外,函数返回NULL; 
如果指定点在客户区内,但是不属于任何一个子窗口,函数返回该CWnd的指针; 
如果有多个子窗口包含指定点,则返回第一个子窗口的指针。 
还要注意的是,该函数返回的是一个伪窗口指针,不能将它保存起来供以后使用。 
对于第二个参数nFlags有几个含义: 
CWP_ALL             file://不忽略任何子窗口 
CWP_SKIPNIVSIBLE    file://忽略不可见子窗口 
CWP_SKIPDISABLED    file://忽略禁止的子窗口 
CWP_SKIPRANSPARENT file://忽略透明子窗口

MFC框架类、文档类、视图类相互访问的方法的更多相关文章

  1. MFC 应用、模板、框架、文档、视图 的关系

    从该对象 如何访问其他对象 全局函数 调用全局函数AfxGetApp可以得到CWinApp应用类指针 应用 AfxGetApp()->m_pMainWnd为框架窗口指针:用CWinApp::Ge ...

  2. 理解MFC 文档、视图、框架[转]

    理解文档/视图框架                                      出处.雷神 了解文档和视图的相互作用关系是编写MFC程序的基本功.但是MFC的应用程序框架把文档和视图之间 ...

  3. MFC文档、视图和框架

    文档.视图.框架 文档/视图结构是MFC提供的一种不错的设计,它将数据的处理和显示分开来,这样更便于我们对程序的维护和扩展. 文档        文档对象用于管理和维护数据,包括保存数据.取出数据以及 ...

  4. VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)

    上一节中鸡啄米讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述       分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或 ...

  5. VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)

    前面一节中鸡啄米进行了文档.视图和框架的概述,本节主要讲解文档.视图.框架结构中各对象之间的关系. 各个对象之间的关系 文档.视图.框架结构中涉及到的对象主要有:应用程序对象.文档模板对象.文档对象. ...

  6. VS2010/MFC编程入门之三十九(文档、视图和框架:概述)

    前面几节讲了菜单.工具栏和状态栏的使用,鸡啄米本节开始将为大家讲解文档.视图和框架的知识. 文档.视图和框架简介 在VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)创建的单文档工 ...

  7. 读取EXCEL文档解析工具类

    package test;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException ...

  8. VS2010-MFC(文档、视图和框架:分割窗口)

    转自:http://www.jizhuomi.com/software/226.html 上一节讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述      ...

  9. VS2010-MFC(文档、视图和框架:各对象之间的关系)

    转自:http://www.jizhuomi.com/software/223.html 前面一节进行了文档.视图和框架的概述,本节主要讲解文档.视图.框架结构中各对象之间的关系. 各个对象之间的关系 ...

随机推荐

  1. zabbix 默认item采集使用被动模式 需要改为主动模式

    数据采集的工作模式可以分为被动模式(服务器端到客户端采集数据) 主动模式(客户端主动上报数据到服务器端) 服务器配置: DBHost=192.168.32.55 DBName= zabbix DBUs ...

  2. 【转】图说Android的8年演变史

    原文网址:http://tech.gmw.cn/2016-02/17/content_18916338_14.htm 图说Android的8年演变史 我有话说    0      2011年10月谷歌 ...

  3. Codeforces 715B & 716D Complete The Graph 【最短路】 (Codeforces Round #372 (Div. 2))

    B. Complete The Graph time limit per test 4 seconds memory limit per test 256 megabytes input standa ...

  4. HDOJ 2014 青年歌手大奖赛_评委会打分

    Problem Description 青年歌手大奖赛中,评委会给参赛选手打分.选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分. Input 输入数据有多组,每组占 ...

  5. cf602A Two Bases

    A. Two Bases time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  6. Android通过类对象的方式实现JSON数据的解析

    1.通过主Activity的Button按钮实现数据的解析 public class MainActivity extends Activity { //定义一个包含Json格式的字符对象 priva ...

  7. C++ static(施工中)

    static 变量 头文件中的static会在引用该头文件的cpp中分别生成副本 //H.h #ifndef _H_H_ #define _H_H_ ; #endif //Ex_2.c #includ ...

  8. UVALive 5990 Array Diversit

    题意:对于一个数列A,substring是一个连续子串,subsequence是其非连续子序列.对于一个数字序列,记它的diversity是它的最大元素减去最小元素的差.给出一个数字序列,求与它div ...

  9. wireshark的使用

    1. 过滤 比如输入www.baidu.com 使用域名过滤条件为 跟踪的过程是: 105和106是dns查询,108和115是dns回应,为什么会有两条,我也不是和清楚 展开106 可以它使用的是U ...

  10. Android网络:开发浏览器(一)——基本的浏览网页功能开发

    我们定义这个版本为1.0版本. 首先,因为要制作一个浏览器,那么就不能通过调用内置浏览器来实现网页的浏览功能,但是可以使用WebView组件来进行. 在此之前,我们可以来看看两种网页显示方式:     ...