深度说明VS2003 MFC程序框架

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

我们提供的服务有:成都网站设计、成都网站制作、微信公众号开发、网站优化、网站认证、平顺ssl等。为千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的平顺网站制作公司

说明:

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给我们的子类里它什么也没做?是的,这一切都听从你的安排!

分享文章:深度说明VS2003 MFC程序框架
网页路径:http://www.stwzsj.com/qtweb/news18/11968.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联