MFC框架类、文档类、视图类相互访问(及窗口句柄获取)的方法
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)); //窗口1 由CView1负责
VERIFY(m_splitter.CreateView(1,0,RUNTIME_CLASS(CView2),CSize(100,100),pContext)); //窗口2 由CView2负责
return TRUE;
}
获取分割视图指针
CView1* pView1 = (CView1*)m_wndSplitter.GetPane(0,0);
CView2* pView2 = (CView2*)m_wndSplitter.GetPane(1,0);
附:
MFC中获取窗口句柄方法:
http://blog.csdn.net/xiaoyun8822/article/details/7939605
---------------------
作者:_北方的雪_
来源:CSDN
原文:https://blog.csdn.net/wingofeagle/article/details/8970663
版权声明:本文为博主原创文章,转载请附上博文链接!
MFC框架类、文档类、视图类相互访问(及窗口句柄获取)的方法相关推荐
- 框架、文档、视图类之间的调用关系
在多文档MFC应用程序执行过程中,创建了多于一个的文档类.视图类.子框架类对象和一个主框架类.应用类对象.这些对象之间是通过一定的方式联系在一起的,在应用程序设计中,时常需要通过这些对象之间的关系来实 ...
- MFC文档、视图类的基本功能和二者基本关系
MFC中,文档类的基本功能是负责管理数据:视图类的基本功能是显示数据: 二者的基本关系是,视图类有一个文档指针m_pDocument : 使用VC6新建一个单文档工程:生成的类中,xxxDoc这个是文 ...
- VS2019/MFC编程入门——文档、视图和框架:分割窗口
上一节中讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口.在内容开始前为大家介绍一款MFC界面开发控件: Xtreme Toolkit Pro | 免费下载:是屡获殊荣的 ...
- 基于MFC多文档多视图结构的OGRE指北针程序
基于MFC多文档多视图结构的OGRE指北针程序 0.前沿 作者: 化凡 QQ: 371691096 Mail:zhixu_07@163.com 1. 功能描述 本程序作为OGRE和MFC结合,欲实现 ...
- vs2010c语言窗口程序,VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)...
上一节中鸡啄米讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型 ...
- c语言 如何读多种数据类型 非类,c语言程序设计教学大纲(非电气类)文档.doc
c语言程序设计教学大纲(非电气类)文档 <C语言程序设计>课程教学大纲 主任 教研室主任 大纲执笔人 姜长洪 王海荣 C语言备课组 一.课程基本信息 课程编号:×××× 课程名称:C语言程 ...
- 交通运输类文档下载——JT/T 808-2019、JT/T 809-2019文档分享
交通运输类文档下载--JT/T 808-2019.JT/T 809-2019文档分享 JT/T 808-2019.JT/T 809-2019文档分享 网盘: https://pan.baidu.com ...
- 最新网页素材文档图库下载类网站源码+织梦CMS内核
正文: 网页素材文档图库下载类网站源码+织梦CMS内核,本程序采用一库两站简洁方便管理后台,一个后台管理两网站,电脑版+手机版 程序特点: 1.网站手工DIV+css,代码精简,首页排版整洁大方.布局 ...
- VS2010-MFC(文档、视图和框架:分割窗口)
转自:http://www.jizhuomi.com/software/226.html 上一节讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述 ...
- Windows编程与MFC # 4 单文档应用程序(1)
整理自VC++程序设计课程课件 使用VC++的应用程序向导MFC AppWizard可以开发: Single document(单文档) Multiple document(多文档) Dialog b ...
最新文章
- 如何能在git bash中使用mvn命令_使用Github Actions完成CI/CD工作
- 三种实现分布式解决方案原理分析
- Android之三大图片缓存原理、特性对比
- 线程启动语句的顺序是否决定线程的执行次序。_详细分析 Java 中启动线程的正确和错误方式
- python去重语句_Python对列表去重的多种方法(四种方法)
- 网易云音乐评论催泪刷屏?我用Python抓取了1008328条热评告诉你为什么!
- linux内核知识图谱
- 苏州大学计算机复试python_苏州大学计算机考研复试经验总结
- MoveIt2——4.机器人模型和机器人状态
- 2022备赛蓝桥杯给大家的建议与提醒和资料,值得认真看一下,多拿几十分
- OA产品:市场需求推动OA发展
- Redis简介和优势
- 有些人的微信字体可以变成蓝色,点进去就可以知道答案,这是为什么呢?
- Java多线程篇--线程的等待通知
- 流媒体服务器原理和架构解析
- qrcode将生成的二维码转成img格式
- “华为杯”研究生数学建模竞赛2020年-【华为杯】B题:降低汽油精制过程中的辛烷值损失模型(附获奖论文)
- C++数据结构算法(一)
- 新电脑 安装idea迁移设置和插件注意事项
- shell之正则表达式及grep命令
热门文章
- Fabio技术手册(1):概述和快速上手
- redis:list的底层实现--压缩列表
- 5.TCP和UDP的区别
- 如何双击运行可执行的jar包-包懂
- 只读字符串的c语言命令,C语言只读空间 - C 语言程序设计
- python的setting怎么找_python-DJANGO_SETTINGS_MODULE如何配置
- matlab复数方程组,【求解】matlab求解非齐次方程组,但是系数矩阵是复数,求帮忙...
- 案例 | 铅酸蓄电池精细维护
- mysql8 修改密码_sysbench压测软件连接mysql8失败案例分析
- 成功解决AttributeError: Parent variable ‘<Variable: ID (dtype = numeric)>‘ is not the index of entity En