MFC不同对话框使用公共数据的几种方法

有时候要在不同Dialog中传递数据,上一篇用到了消息机制。后来又查了一下,发现还有其他的方法总结一下:
1,全局变量
习惯将全局变量在StdAfx.cpp中定义,然后在StdAfx.h中用extern声明
这样,只要某个文件中有 #include “StdAfx.h” 语句,他就可以用这个全局变量。如:

定义全局变量:
stdafx.h:
extern int g_nLanguage;
extern CString g_sInitStr ;

stdafx.cpp:
int g_nLanguage;
CString g_sInitStr = _T("InitInfo" );
几乎每个文件都有#include "stdafx.h".

2,利用项目的*APP

**用MFC生成的工程中都有一个名为CxxxApp的类,它派生于CWinApp类。这个类主要进行程序的初始化,生成文档、视图对象等工作。我们可以把需要全局访问的变量和函数定义为这个类的成员变量和成员函数,就可以实现全局访问了。
  从严格意义上讲,这种变量和函数并不是全局的,因为它仍然只是类中的成员,只是由于我们很容易获得CxxxApp类的指针,所以我们可以在文档、视图、对话框以及各种自定义类中访问到它们,达到与全局变量类似的效果。访问时用函数“AfxGetApp()”获得CxxxApp类的指针,用“AfxGetApp()->成员”访问变量或函数。**
  
在 项目名.h 文件中找到 项目名APP的定义,加上变量的定义。如:

class CMFCdialogExchangeDataApp : public CWinApp
{
public:
    CMFCdialogExchangeDataApp();

    //定义要用的变量
    CString exchangeDataC;

// 重写
public:
    virtual BOOL InitInstance();
// 实现
    DECLARE_MESSAGE_MAP()
};

在想要使用变量的CPP文件中使用,这里还有两种方式:
a:实例化引用:

//使用一定义的全局变量 通过对象的实例
extern CMFCdialogExchangeDataApp theApp;//引用
theApp.exchangeDataC;//这样就可以取到变量

b:通过指针,使用AfxGetApp()函数

//获取指针
CMFCdialogExchangeDataApp * pApp = (CMFCdialogExchangeDataApp * )AfxGetApp();
//调用
pApp->exchangeDataC ;

第二种方法的a方式经过验证是可行的。其他方式理论上可行,但没有验证。
如有不妥之处,请多指正。

你可能感兴趣的:(开发)