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. Android Wear开发 - 数据通讯 - 第零节 : 打包Wear应用(手机和手表应用如何连接)

    之所以将打包这一特殊的内容作为数据通讯的第零节,是因为如果没有通过配置打包的一些信息,则没有办法将手机端应用和手表端应用连接起来,则无法继续进行接下来的数据通讯的开发. 以下依然只针对Eclipse平 ...

  2. AC+DP练习

    1.HDU 2222 Keywords Search 求目标串中出现了几个模式串. #include<iostream> #include<cstdio> #include&l ...

  3. 【贪心】HDU 5783 Divide the Sequence

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5783 题目大意: 把一个N个数的数列拆成若干段,保证每一段的前缀和都非负,求最多能拆成多少段. 题目 ...

  4. 【STL】【模拟】Codeforces 696A Lorenzo Von Matterhorn

    题目链接: http://codeforces.com/problemset/problem/696/A 题目大意: 一个满二叉树,深度无限,节点顺序编号,k的儿子是k+k和k+k+1,一开始树上的边 ...

  5. 数学概念——I - 数论,线性方程

    I - 数论,线性方程 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit  ...

  6. Java调用R(三)_系统命令调用

    java通过配置的系统命令Rscript直接调用R脚本. 优点:R脚本和Java代码完全分离 缺点:R中变量不能控制 1. Java本地能够成功调用. public void CallR() { Ru ...

  7. 关闭ES动态创建type

    虽说ES的默认设置已经够我们使用了,但是总有些情景需要我们修改一些配置. 由于ES 2.*不能单独删除某个type,只能将整个index删除.这无疑非常让人苦恼. 所以我们需要关闭动态创建type以减 ...

  8. ashx一般处理程序文件用处

    今天逛博客园,无意发现一篇好文章,关于ashx文件的使用. 文章一:向服务器发送josn字符串,服务器端解析 本文转载:http://www.cnblogs.com/yzenet/p/3470388. ...

  9. Android Activity启动模式

    <activity android:name=".MainActivity" android:launchMode="singleTask"> &l ...

  10. JAVA大数类

    JAVA大数类api http://man.ddvip.com/program/java_api_zh/java/math/BigInteger.html#method_summary 不仅仅只能查J ...