关于MFC自动生成的各个类的指针访问
经常看到有朋友在问这个问题,在MFC自动生成的类中,如果想从一个类中,直接访问另一个类中的成员函数与成员变量该怎么办呢?
今天我就这个问题来详细的说明一下.以下为例,如果说我给工程取的名称为PanelBuilder,如果我选的是单视图(这里主要是将要生成的CLeftView区分,指仅仅是一个视图没有分割窗体),那么MFC会生成以下几个名称的类:
1.CPanelBuilderApp 这个是应用程序的入口类
2.CPanelBuilderView 这个是视图类
3.CPanelBuilderDoc 这个是与视图交互信息的文档类
4.CMainFrame 这个是主框架类
当然还自动生成了一个about对话框类,用来显示版本信息,这里我们不讨论这个类.下面切入正题.
1.如何从其他类中访问CPanelBuilderView的方法?
((CPanelBuilderView *)(AfxGetApp()->m_pMainWnd))->Function();
对于单视图来说m_pMainWnd就是指的这个视图的指针,然后强制转换后即可用
2.对于多视图的怎么办呢?比如说我左边有一个CLeftView的怎么办?
2.1如何从CLeftView中访问CPanelBuilderView的方法?
这样的话,是用到了分割窗体,所以在CMainFrame中会有一个私有的成员变量叫做m_SpliterWnd,这个指针指的是整个的视图,我们先要将其改成公有的,然后再CLeftView中这样写:
((CPanelBuilderView*)(((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_SpliterWnd).GetPane(0,1))->Function()
即可;
呵呵,是不是很晕?让我来解释一下吧.AfxGetApp()->m_pMainWnd得到CMainFrame的指针,强制转换后调用 m_SpliterWnd这个成员变量的方法GetPane(int,int),在分割窗体中,窗体的标识是从上到下,从左到右的顺序按(0,0), (0,1)等等标识的,我们要得到的CPanelBuilderView这个窗体的指针是(0,1)得到后再强制转换一次即可.
2.2那么从别的类中访问CLeftView怎么办呢?
((CPanelBuilderView*)(((CMainFrame*) (AfxGetApp()->m_pMainWnd))->m_SpliterWnd).GetPane(0,0))->Function()
即可。因为CLeftView是第零行,第零列.
3.如果是基于对话框的程序呢?
其实它是和基于视图的类似,细心的朋友可能会发现,在其于对话框的APP中会有这一行代码
CPanelRunnerDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
看到了么?说明可以直接用m_pMainWnd来访问DLG中的成员变量,与成员方法,想在其他类中使用DLG的方法这样写就好
((CPanelBuilderDLG *)(AfxGetApp()->m_pMainWnd))->Function();
当然程序的应用可能不只这些,不过只要掌握以上这些访问的方法,我想其他的应该一能百通了吧.
转自:http://blog.csdn.net/xfrunning/archive/2007/10/20/1834231.aspx
转载于:https://www.cnblogs.com/cylee025/archive/2011/04/08/2009692.html
关于MFC自动生成的各个类的指针访问相关推荐
- 使用maven根据JSON文件自动生成Java POJO类(Java Bean)源文件
根据JSON文件自动生成Java POJO类(Java Bean)源文件 本文介绍使用程序jsonschema2pojo来自动生成Java的POJO类源文件,本文主要使用maven,其他构建工具请参考 ...
- 小d课堂mysql_小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类...
笔记 6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数据库 菜单View→Tool Window ...
- Mybatis自动生成的Example类的使用与解析
在上篇文章我有讲到mybatis如何自动生成我们所需的dao代码,今天我们把上篇文章遗留的问题给大家讲解一下.个人拙见,欢迎补充. 上篇文章中我有说过利用Mybatis自动生成的Example类可以满 ...
- IDEA自动生成类注解,IDEA作者信息自动生成,IDEA类信息自动生成
在新建类文件的时候自动生成注解,诸如我们常见的那些 作者,创建时间,TODO 等等 将以下格式的代码放在Settings -> File and Code Templates -> Inc ...
- IntelliJ IDEA自动生成自定义的类注释和方法注释
目录 自定义的类注释 自定义方法注释 实现效果:不用手写即可自动生成如下图的类上注释和方法上的注释,我们只需要填写方法注释的参数和返回值文字描述即可,大大节省了代码开发的时间提高代码开发效率. 自定义 ...
- VC++自动生成的对话框类头文件中的enum {IDD= xxxx}解释
1 MFC中对话框类和对话框资源之间的联系 使用VC++ MFC做开发的时候,经常需要插入对话框资源,然后根据这个资源生成相应的对话框类文件.类文件和对话框资源之间的联系纽带就是对话框控件ID,与其他 ...
- idea package自动生成_IDEA自动生成pojo实体类模板
-由于直接用idea的自动实体生成,他的包名是不会变的,而且类型也不是自己想要的,这里把我一直用的这份模板分享出来 点击你需要的表右键-->选择下图的Go to Scripts Director ...
- IntelliJ IDEA快速自动生成Junit测试类
1.背景 测试是保证代码必不可少的环节,自己构建测试方法太慢,并且命名也不规范,idea中提供了,一键构建测试结构的功能...废话不多说,直接写步骤 2.步骤 1.在需要做测试的类的当前窗口,直接按快 ...
- 工具类:自动生成名字工具类
public class CharUtil {/*** 将字符串转换成相应的字符编码* @param s* @return*/public static String bytes2HexString( ...
最新文章
- php private方法,PHP-private私有访问的操作方法
- Machine Learning week 9 quiz: Anomaly Detection
- 拼装机器人感想_机器人学习心得体会(精选3篇)
- python avg_python闭包
- 12.IDA-虚函数和虚表(vf代表虚函数,vf3代表this指向第三个函数)
- 消防给水及消火栓系统技术规范_对于高位消防水箱《消防给水及消火栓系统技术规范》是如何规定...
- 企业网络营销意识的重要性
- H5网页实现录音并转换为文字
- python基础--del操作
- ibm服务器硬盘raid检测,IBM 3650 服务器做的RAID5,两块硬盘亮黄灯,但是系统正常,更换...
- 尚硅谷【韩顺平】 | Java数据结构和算法【详细笔记】(持续更新)
- 职场上被人针对要不要告诉领导
- 扇形导航 html svg
- 1-1 一摞有风格的纸牌之一摞
- HTML5期末大作业:汽车网页设计——保时捷6页(代码质量好) 学生DW网页设计作业源码 web课程设计网页规划与设计
- python实现借助360加固保代码实现批量、断点再续等功能
- 重要公告|社区批准第一批最新生态系统Grants
- 如何搭建统一的数据分析平台——杭州联合银行建设经验
- 送给北京地区想跳槽的底层人民
- 数据库三大范式的理解(大白话篇)
热门文章
- Winform模态窗体关闭时赋值给打开自身的窗体(C# 事件委托版)
- AUCAD自定义[2006.9.22]
- abapdata定义方法_ABAP中用函数定义后台作业的一个程序
- sysadmin默认密码_Sysadmin工具,Kconfig / kbuild的秘密,11个KDE应用程序,tcpdump,Laverna,Python等
- 涂抹果酱_如何玩果酱
- 开源硬件 可穿戴_11个出色的可穿戴开源项目
- 数据战略规划_在战略规划期间我应该如何协作?
- 印度 语言简称_保存印度的语言和文化:图卢维基百科的诞生
- hacker_Hacker Public Radio上的免费软件
- JavaScript之常见算法排序