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. linkedin和facebook的区别

    摘录一段百科(http://www.baike.com/wiki/LinkedIn)的文字: Linkedin - 特点 Linked是一个“高效”.“安全”并且“有商务价值”的“白领SNS提供商”: ...

  2. POJ 3189 Steady Cow Assignment

    题意:每个奶牛对所有的牛棚有个排名(根据喜欢程度排的),每个牛棚能够入住的牛的数量有个上限,重新给牛分配牛棚,使牛棚在牛心中的排名差(所有牛中最大排名和最小排名之差)最小.   题目输入: 首先是两个 ...

  3. 数据结构(树链剖分,线段树):SDOI 2016 游戏

    4515: [Sdoi2016]游戏 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 351  Solved: 157[Submit][Status][ ...

  4. SQL中的NULL值

    除is [not] null之外,空值不满足任何查找条件.–如果null参与算术运算,则该算术表达式的值为null.–如果null参与比较运算,则结果可视为false.在SQL-92中可看成unkno ...

  5. [Locked] Wiggle Sort

    Wiggle Sort Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= ...

  6. HDU1510 White rectangles

    White Rectangles Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. 简单的FOLLOW集演示程序

    /* * 该程序用于计算某个非终结符的 FOLLOW 集合 * RexfieldVon * 2013年6月30日16:02:47 */ #include <stdio.h> #includ ...

  8. selenium webdriver python 操作IE浏览器

    Step1:下载IEDriverServer 下载路径:http://selenium-release.storage.googleapis.com/index.html 我下载的是2.48版本的IE ...

  9. MP3播放器的实现

    今天,基本上实现了MP3播放器的基本功能,现在总结一下. 首先,下载服务器端的MP3列表,这里用到了下载技术和解析XML文件技术. 下载参考(http://blog.csdn.net/huim_lin ...

  10. 平衡树(AVL)详解

    1. 为什么平衡树? 在二叉搜索树(BST,Binary Search Tree)中提到,BST树可能会退化成一个链表(整棵树中只有左子树,或者只有右子树),这将大大影响二叉树的性能. 前苏联科学家G ...