MFC 不同窗体之间变量调用

应用场景:

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

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

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

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

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

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

复制代码
//TeachDlg.h

class TeachDlg
{
    int number;
    void Lesson();
}
复制代码
复制代码
//TeachDlg.cpp

#include "TeachDlg.h"

TeachDlg  * g_DlgTeach;

void TeachDlg::Lesson()

{
     number = 1;

}
复制代码

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

复制代码
//TeachDlg.cpp
BOOL TeachDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // TODO:  Add extra initialization here
    g_DlgTeach = this;
    ...
}
复制代码

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

复制代码
//Student.cpp
#include "TeachDlg.h"

extern TeachDlg *g_DlgTeach;

Student::Study()
{
    g_DlgTeach->Lesson();
}
复制代码

注意:

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

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

image

posted @   不锈钢老鼠  阅读(2919)  评论(3编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示