经常看到有朋友在问这个问题,在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自动生成的各个类的指针访问相关推荐

  1. 使用maven根据JSON文件自动生成Java POJO类(Java Bean)源文件

    根据JSON文件自动生成Java POJO类(Java Bean)源文件 本文介绍使用程序jsonschema2pojo来自动生成Java的POJO类源文件,本文主要使用maven,其他构建工具请参考 ...

  2. 小d课堂mysql_小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类...

    笔记 6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数据库 菜单View→Tool Window ...

  3. Mybatis自动生成的Example类的使用与解析

    在上篇文章我有讲到mybatis如何自动生成我们所需的dao代码,今天我们把上篇文章遗留的问题给大家讲解一下.个人拙见,欢迎补充. 上篇文章中我有说过利用Mybatis自动生成的Example类可以满 ...

  4. IDEA自动生成类注解,IDEA作者信息自动生成,IDEA类信息自动生成

    在新建类文件的时候自动生成注解,诸如我们常见的那些 作者,创建时间,TODO 等等 将以下格式的代码放在Settings -> File and Code Templates -> Inc ...

  5. IntelliJ IDEA自动生成自定义的类注释和方法注释

    目录 自定义的类注释 自定义方法注释 实现效果:不用手写即可自动生成如下图的类上注释和方法上的注释,我们只需要填写方法注释的参数和返回值文字描述即可,大大节省了代码开发的时间提高代码开发效率. 自定义 ...

  6. VC++自动生成的对话框类头文件中的enum {IDD= xxxx}解释

    1 MFC中对话框类和对话框资源之间的联系 使用VC++ MFC做开发的时候,经常需要插入对话框资源,然后根据这个资源生成相应的对话框类文件.类文件和对话框资源之间的联系纽带就是对话框控件ID,与其他 ...

  7. idea package自动生成_IDEA自动生成pojo实体类模板

    -由于直接用idea的自动实体生成,他的包名是不会变的,而且类型也不是自己想要的,这里把我一直用的这份模板分享出来 点击你需要的表右键-->选择下图的Go to Scripts Director ...

  8. IntelliJ IDEA快速自动生成Junit测试类

    1.背景 测试是保证代码必不可少的环节,自己构建测试方法太慢,并且命名也不规范,idea中提供了,一键构建测试结构的功能...废话不多说,直接写步骤 2.步骤 1.在需要做测试的类的当前窗口,直接按快 ...

  9. 工具类:自动生成名字工具类

    public class CharUtil {/*** 将字符串转换成相应的字符编码* @param s* @return*/public static String bytes2HexString( ...

最新文章

  1. php private方法,PHP-private私有访问的操作方法
  2. Machine Learning week 9 quiz: Anomaly Detection
  3. 拼装机器人感想_机器人学习心得体会(精选3篇)
  4. python avg_python闭包
  5. 12.IDA-虚函数和虚表(vf代表虚函数,vf3代表this指向第三个函数)
  6. 消防给水及消火栓系统技术规范_对于高位消防水箱《消防给水及消火栓系统技术规范》是如何规定...
  7. 企业网络营销意识的重要性
  8. H5网页实现录音并转换为文字
  9. python基础--del操作
  10. ibm服务器硬盘raid检测,IBM 3650 服务器做的RAID5,两块硬盘亮黄灯,但是系统正常,更换...
  11. 尚硅谷【韩顺平】 | Java数据结构和算法【详细笔记】(持续更新)
  12. 职场上被人针对要不要告诉领导
  13. 扇形导航 html svg
  14. 1-1 一摞有风格的纸牌之一摞
  15. HTML5期末大作业:汽车网页设计——保时捷6页(代码质量好) 学生DW网页设计作业源码 web课程设计网页规划与设计
  16. python实现借助360加固保代码实现批量、断点再续等功能
  17. 重要公告|社区批准第一批最新生态系统Grants
  18. 如何搭建统一的数据分析平台——杭州联合银行建设经验
  19. 送给北京地区想跳槽的底层人民
  20. 数据库三大范式的理解(大白话篇)

热门文章

  1. Winform模态窗体关闭时赋值给打开自身的窗体(C# 事件委托版)
  2. AUCAD自定义[2006.9.22]
  3. abapdata定义方法_ABAP中用函数定义后台作业的一个程序
  4. sysadmin默认密码_Sysadmin工具,Kconfig / kbuild的秘密,11个KDE应用程序,tcpdump,Laverna,Python等
  5. 涂抹果酱_如何玩果酱
  6. 开源硬件 可穿戴_11个出色的可穿戴开源项目
  7. 数据战略规划_在战略规划期间我应该如何协作?
  8. 印度 语言简称_保存印度的语言和文化:图卢维基百科的诞生
  9. hacker_Hacker Public Radio上的免费软件
  10. JavaScript之常见算法排序