为什么不能用theApp访问应用程序? 50

在MFC对话框应用程序中,有一个CMyApptheApp。这个theApp应该是全局的,但是为什么不能用theApp访问应用程序呢?编译出错!... 在MFC对话框应用程序中,有一个CMyApp theApp。
这个theApp应该是全局的,但是为什么不能用theApp访问应用程序呢?
编译出错!
展开
 我来答
ZBRz68l
2016-05-07 · TA获得超过371个赞
知道小有建树答主
回答量:471
采纳率:0%
帮助的人:464万
展开全部
MFC应用程序中,无论是基于单文档还是对话框的应用程序,在应用程序类中,都有theApp这个变量,
eg:CADOApp theApp;
theApp代表应用程序实例~~

如果我们在应用程序类再定义了一个变量,例如 _ConnectionPtr m_pConnection;
当我们在其他类,比如Dlg类中,想用到m_pConnection这个变量时,可以借助theApp来调用,
例如,在OnInitDialog函数中,有
m_pRecordset->Open("SELECT * FROM tt",
theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);

这句话~~
就是通过theApp来调用~~

***********************************************************************************************************************

注意:在C×××App类中 ,有 theApp 这个变量,
在MFC程序其他类中,可以用 theApp 来调用C×××App类中所有的方法和公有成员变量,
比如,如果想在B类中调用C×××App类VerifyPower()函数,只需在B类的头文件类的定义外,加上
extern C×××App theApp; 这句话~~
如果在C类中也想调用,则也要在C类的头文件中,加上extern C×××App theApp;

extern是外部的意思 用来调用其他文件中定义过的变量
当然,如果在一个文件中如果包括了头文件,也可以省去这一步


这样做的好处是,在某一个类中定义的函数或变量,在其他类中都可以使用,并且不用对原来那个类进行实例化,方便快捷,
这样做,对程序的封装也有一些不利的影响
*********************************************************************************************************************************

CSDN中对theApp的用法的总结:
1.theApp是你工程的头,你可以通过AfxGetApp()获得整个进程的指针,然后通过它,可以获得该进程的HWND以及HINSTANCE,和菜单。。。等等。不一而足。可以通过msdn获得更多的信息

2.theApp是个全局变量,几乎可以在程序的任何地方引用。如果你建立一个MDI或者SDI工程,那么,你可以看到一个类以*App结尾,这个theApp就是它的一个实例,在这个类中添加的public变量可以通过theApp引用。当然,由于WinApp是它的基类,theApp保存有许多有关程序运行期间的很多信息,如执行程序名,路径什么的。

3.加个成员及方法,可以随时用AfxGetApp访问

4.theApp是CWinApp类的派生类的对象,是一个全局变量。全局变量在WinMain()前被创建。

5.theApp就是应用程序的实例,没有他你就什么都不能做啊!他初始了进程啊!
追问
问题是,在CApp以外的类调用theApp,编译都会报错!
编译会说theApp未声明,但是theApp不是全局变量吗?
theApp为什么显示在Global条目下?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式