经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件图像 » Visual Studio » 查看文章
MFC 不同窗体之间变量调用
来源:cnblogs  作者:不锈钢老鼠  时间:2018/9/25 20:49:30  对本文有异议

应用场景:

(1)主对话框包含一个Tab控件,Tab控件用来切换显示若干子对话框,子对话框类的成员需要互相访问。

(2)或者程序中包含多个类,各类之间需要互相访问。

方法1-定义指针成员变量:

详情参见文章:MFC一个类访问另一个类成员对象的成员变量值 - 路人浅笑 - 博客园 https://www.cnblogs.com/perfy/p/5329630.html

方法2-定义全局指针变量:

与方法1类似,只不过定义的指针变量在类的实现cpp文件中,是全局变量。

  1. //TeachDlg.h
  2.  
  3. class TeachDlg
  4. {
  5. int number;
  6. void Lesson();
  7. }
  1. //TeachDlg.cpp
  2. #include "TeachDlg.h"
  3. TeachDlg * g_DlgTeach;
  4. void TeachDlg::Lesson()
  5. {
  6. number = 1;
  7. }

这样就可以省去在类外初始化静态成员指针这一步,只需要在类的构造函数中或者对话框初始化函数中对指针进行赋值。如下:

  1. //TeachDlg.cpp
  1. BOOL TeachDlg::OnInitDialog()
  2. {
  3. CDialogEx::OnInitDialog();
  4. // TODO: Add extra initialization here
  5. g_DlgTeach = this;
  6. ...
  7. }

最后在其他类中调用本类的函数时,需要在其实现cpp文件中声明这个全局指针即可。

  1. //Student.cpp
  2. #include "TeachDlg.h"
  3.  
  4. extern TeachDlg *g_DlgTeach;
  5. Student::Study()
  6. {
  7. g_DlgTeach->Lesson();
  8. }

注意:

如果没有对指针进行初始化, 即没有执行 g_DlgTeach = this; 这句话,

就调用指针来访问TeachDlg类的成员函数,是不会报错的,但访问成员变量就会报错。

image

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号