深度说明VS2003 MFC程序框架

开发 后端
前些日子一直想写关于VS2003 MFC这个东西,做了一个开头放在我的主页上(但是名为<MFC框架程序WINMAIN函数分析>,到后来就没有再管了,其实那只是我写的冰山一脚。

希望我对VS2003 MFC一点经验能给大家带来帮助,在这里拿出来和大家分享一下。VS2003 MFC经过长时间的发展,很多用户都很了解VS2003 MFC了,这里我发表一下个人理解,和大家讨论讨论。

说明:

1、本文作者在VS2003中跟踪代码,此代码为VS2003中拷贝,使用MFC7。
2、不同框架的MFC程序由所不同,本文以单文档为例。
3、本文读者需要有一定的SDK的基础,不需要太多,至少知道它的基本框架和来龙去脉即可!
4、文章只想起到说明作用,所以代码会有一些删除。

学MFC,竟然还不知道MFC的MAIN函数在什么地方?怎么运行的?实在不高明。
看过候捷(JJHOU)老师的《深入浅出MFC》的,对它一定很熟悉。呵呵,本文是献给没有看过那本书,但是又很希望学习MFC程序设计的朋友的。(没有看过那本书的朋友还不赶快去买?)其实本文,主要是对《深入浅出MFC》第六章的一个总结和补充罢了!(本文有该书不同的地方,也有一些笔者自己的见解!)
言归正传。

假如你用AppWizard一步一步NEXT下来,然后在CLASSVIEW中去找寻WINMAIN函数,那么你只有失望。MFC最大的特点是什么?封装!MFC的确封装的太好了,以至于很多想学习MFC的人都望而却步。闲话少说,还是继续我们今天的话题,MAIN函数!实话告诉你吧,即使你搜索所有的MFC生成的文件,都无法发现WINMAIN的字眼,那么它就近在什么地方呢?

我相信你已经想到,MAIN函数应该在主要的应用程序文件中。难道是“您定义的程序名.cpp”这个文件?不错就是它。再Crtl+F一下,看有没有我们要找的WINMAIN函数?看来你又要失望了,但是你注意有这样一句:

是不是很特别,再注意一下那句注释“TheoneandonlyCMyAppobject”,每个应用程序有且只用一个CMyApp对象。我想你应该想到了,WinMain函数每个程序也只能有一个,那么这个全局对象跟WinMain函数肯定有莫大的关系?没错,相信你的直觉。#t#

特别注意:深晓C++细节的人一定知道,全局对象优先于MAIN函数执行的道理。如果你不知道也没关系,那么我在这里告诉你:“全局对象优先于MIAN函数执行,且构建于栈中,切记,切记!”

现在,我们该深入WinMain运行机制了,确切的说,应该是MFC的机制!
首先,看看MFC的库文件把,它能给我们带来许多惊喜。(vc6的相应的目录是\MicrosoftVisualStudio\VC98\MFC\SRC;VC7相应的目录是\MicrosoftVisualStudio.NET2003\Vc7\atlmfc\src\mfc)

现在我们就从这个全局下手,开始今天的旅途。此时,系统会执行CMyApp的父类(CWinApp)构造函数,再执行CMyApp的构造函数。(先有老爹,再有儿子!),此时就会调用CWinApp的构造函数。OK,就到这里就可以了,仔细看上面代码,它已经完成了应用程序线程额的启动,它给予了我们程序的生命。现在请注意:

这段代码的意思是,获得了CMyApp的全局对象的this指针。(此时你肯定要疑问,为什么是CMyApp的指针?this目前是在CWinApp中啊?   对此我的答案是,可是你是由CMyApp的对象引发的CWinApp的构造啊!!)这个指针可非一般的人物,稍后我们的很多工作都要靠它完成。

CWinApp之中的成员变量将因为theApp这个全局对象的诞生而获得配置和初始值。构造完父类,现在构造子类。可是我们看到,AppWizard给我们的子类里它什么也没做?是的,这一切都听从你的安排!

责任编辑:chenqingxiang 来源: NET130
相关推荐

2009-12-11 14:38:06

VS2003安装程序

2009-11-26 10:02:06

2009-11-25 09:50:06

VS2003程序

2009-12-09 16:52:51

VS 2003插件

2009-12-10 13:11:47

VS2003安装

2009-12-18 10:10:49

VS 2003程序

2009-12-01 10:54:48

VS2003 英文版

2009-12-01 17:55:11

VS2003配置

2009-11-25 11:25:31

VS2003软件

2009-11-30 11:25:24

VS2003 UNIC

2009-11-27 09:53:15

VS2003安装程序

2009-11-26 11:05:59

VS2003控件

2009-11-27 09:16:11

VS2003配置文件

2009-12-09 13:41:04

VS 2003 报错

2009-11-27 08:59:29

VS2003配置文件

2009-11-30 13:51:28

2009-12-16 10:15:58

VS2003编译

2009-12-15 13:39:43

2009-12-16 13:29:27

VS2003版本

2009-12-01 13:10:29

VS2003压缩代码
点赞
收藏

51CTO技术栈公众号