From: http://hi.baidu.com/wxnxs/item/156a68f5b3b4ed18e3e3bd03

MFC中获取App,MainFrame,Doc和View类等指针的方法

1  获取应用程序类(App)指针

在任何类中都可用MFC全局函数AfxGetApp()获得

2 获取框架类(MainFrame)指针

1)在App中获得MainFrame指针
CWinApp 中的  m_pMainWnd变量就是MainFrame的指针
也可以: CMainFrame *pMain =(CMainFrame  *)AfxGetMainWnd();

2) 在View中获得MainFrame指针

CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;

3 获取各种视图类(View)指针

1)(在App,MainFrame,Doc中)获取当前已建立View

CMainFrame *pMain = (CMainFrame *)AfxGetApp()->m_pMainWnd;
CMyView *pView = (CMyView *)pMain->GetActiveView();

2)从文档类(Doc)取得视图类(View)的指针----多视

CDocument类提供了两个函数用于视图类的定位:GetFirstViewPosition()和GetNextView()

virtual POSITION GetFirstViewPosition() const;
virtual  CView* GetNextView(POSITION& rPosition) const;

例:CTestView* pTestView;    POSITION pos=GetFirstViewPosition();     pTestView=GetNextView(pos);

为了方便,我们将其作为一个文档类的成员函数,它有一个参数,表示要获得哪个类的指针。实现如下:

CView* CTestDoc::GetView(CRuntimeClass* pClass)

{

CView* pView;

POSITION pos=GetFirstViewPosition();

while(pos!=NULL){

pView=GetNextView(pos);

if(!pView->IsKindOf(pClass))

break;

}

if(!pView->IsKindOf(pClass)){

AfxMessageBox("Cannot Locate the View!");

return NULL;

}

return pView;

}

3)从一个视图类取得另一视图类的指针

用文档类作中转,先得到文档类的指针,再用文档类的视图定位函数取得另一个视图类。同样,可以实现成一个函数:
(假设要从CTestAView中取得指向其它视图类的指针)

CView* CTestAView::GetView(CRuntimeClass* pClass)

{

CTestDoc* pDoc=(CTestDoc*)GetDocument();

CView* pView;

POSITION pos=pDoc->GetFirstViewPosition();

while(pos!=NULL){

pView=pDoc->GetNextView(pos);

if(!pView->IsKindOf(pClass))

break;

}

if(!pView->IsKindOf(pClass)){

AfxMessageBox("Cannot Locate the View!");

return NULL;

}

return pView;

}

4)获取分割视图中各个视图的指针
CSplitterWnd  m_wndSplitter;
m_wndSplitter.CreateStatic(this, 1,  2);//分割成一行两列
m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftPaneView),  CSize(10, 10), pContext);
m_wndSplitter.CreateView(0, 1,  RUNTIME_CLASS(CRightPaneFrame), CSize(0, 0),  pContext);
//获取左边视图的两种方法
CLeftPaneView* pLeftPaneView     =  (CLeftPaneView*)    m_wndSplitter.GetPane(0,0);
//上一句可以用下句代替:
//CLeftPaneView* pLeftPaneView   = (CLeftPaneView *)GetActiveView();
//获取右边视图

pLeftPaneView->m_pRightPaneFrame = (CRightPaneFrame*)  m_wndSplitter.GetPane(0,1);

4 获取各种文档类(Doc)和文档模板类的指针

1)获得当前文档指针       CDocument * pCurrentDoc = (CFrameWnd  *)m_pMainWnd->GetActiveDocument();

2)从文档模板获得文档类指针

一个文档模板可以有多个文档,每个文档模板都保留并维护了一个所有对应文档的指针列表。

用CDocTemplate::GetFirstDocPosition函数获得与文档模板相关的文档集合中第一个文档的位置,并用POSITION值作为CDocTemplate::GetNextDoc的参数来重复遍历与模板相关的文档列表。函数原形为:

virtual POSITION GetFirstDocPosition( ) const = 0;

virtual CDocument *GetNextDoc(POSITION & rPos) const = 0;

如果列表为空,则rPos被置为NULL.

3)在文档类中获得文档模板指针

在文档中可以调用CDocument::GetDocTemplate获得指向该文档模板的指针。

函数原形如下: CDocTemplate * GetDocTemplate ( )  const; 
如果该文档不属于文档模板管理,则返回值为NULL。

转载于:https://www.cnblogs.com/puncha/p/3876860.html

MFC中获取App,MainFrame,Doc和View类等指针的方法相关推荐

  1. Android Java代码中获取App渠道信息

    项目中需要在Java中获取App打包的渠道信息,而打包渠道相关的内容一般都设置在 build.gradle 的 productFlavors{} 中. 以下是介绍一种方便的实现方法,通过manifes ...

  2. MFC中主副屏窗口全屏最大化的几种方法

    MFC中主副屏窗口全屏最大化的几种方法 1.根据鼠标位置判断全屏位置 枚举所有窗口 CArray<MONITORINFO, MONITORINFO&> g_arrMonitorIn ...

  3. php 修改文件访问时间,PHP中获取文件创建日期、修改日期、访问时间的方法

    php获取文件创建时间.修改时间常用代码filemtime ( string filename ) 返回文件上次被修改的时间,出错时返回 FALSE.时间以 Unix 时间戳的方式返回,可用于 dat ...

  4. 微信小程序自定义组件中获取app实例的值,生命周期与页面的生命周期执行先后顺序

    调试基本库:2.12.2 最近在接触微信小程序开发 有这么一个需求,自定义组件需要给页面传一个app实例的参数, 总结: 1.自定义组件中data 不能直接获取app.globalData 2.通过自 ...

  5. AppInfoUtil 获取App应用程序信息工具类

    这段时间在写快速开发框架,抽空总结了一下网上的获取App信息的工具,相对来说比较灵活. 参数为Context context 能够获取应用名称,应用包名,版本号,版本名称,签名,应用图标 packag ...

  6. go语言中获取本机sid、mac地址和cpuid的方法(windows系统下有效)

    在平常工作中可能会遇到需要获取本机mac地址或cpuid的场景,综合网上的办法,亲自试验总结如下: 1.如果只是要查本机sid地址,则很简单,直接在cmd命令窗口中输入命令: whoami /user ...

  7. 黑马程序员mfc中分割窗口---ctreeview未定义基类的解决方法

    在跟班黑马程序学mfc中分割窗口,vs2019出现了以下的错误.解决方法很简单. 首先我们点击错误,自动定位到出错的类,会发现出错的是CSelcetView的头文件和源文件出错, 我们找到头文件中 在 ...

  8. MFC中获取TimeStamp的简要方法

    1.获取精确到秒的TimeStamp(10位) SYSTEMTIME sysTime;::GetLocalTime(&sysTime); CTime curTime(sysTime);__in ...

  9. MFC中获取指定打印机的打印队列的方法

    void CPrintListTestDlg::OnBnClickedButton1() {GetDlgItem(IDC_TxtList)->SetWindowText(L"" ...

最新文章

  1. AI时代的GitHub,这个陆奇看好的方向,终于有人做了
  2. Mysql sequence使用_MySQL 序列使用_mysql sequence_mysql auto increment
  3. Springboot 常见请求方式
  4. oracle mssql 实例,oracle,mysql,SqlServer三种数据库的分页查询的实例
  5. python 动态相册_Python编程:制作电子相册
  6. mybatis 自动生成integer_通过mybatis-generator-core工具自动关联表生成对应model、mappers及dao层代码类完整教程...
  7. 一个年轻的码农的一个C#项目
  8. 启用OWA提示用户密码过期工具
  9. 开源软件冲破云霄,“机智号”直升机首飞成功,还带来了第一个火星机场!...
  10. 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序搜索
  11. 【招聘】搜狗输入法-自然语言处理研究员
  12. PHP 文件下载 header设置
  13. Windows 2008下Exchange Server部署攻略
  14. 为什么grab显示无法定位_西门子SIPARTPS2阀门定位器的故障处理
  15. 重要发布全总结丨一文看懂阿里云弹性计算年度峰会
  16. 网页打开慢升级服务器宽带,网速快打开网页慢怎么办_网络测速很快但是上网很慢如何解决-win7之家...
  17. 【线程 锁】ExecutorService的submit方法使用
  18. mand-mobile-rn 多 Android Module link 实现
  19. 大一新生调查报告——新生遇到的问题与需求
  20. 统信UOS+win7双系统安装

热门文章

  1. Python数据分析模块 | pandas做数据分析(一):基本数据对象
  2. Ubuntu16.04+Cuda8.0+cuDNN6配置py-faster rcnn(转)
  3. QGIS中如何加载identify
  4. python的for语句写新的字符串_Python:for循环遍历对象,而不是字符串
  5. php为什么没有rz 命令,Linux上传文件-    命令之rz
  6. php 反转一个整数,LeetCode PHP 整数反转
  7. 信安教程第二版-第24章工控安全需求分析与安全保护工程
  8. Cocos2d手机游戏引擎介绍
  9. 本地添加Maven管理
  10. 静态 动态 强类型 弱类型语言的区别