- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[vc架构分析
vc++6.0中AppWizard生成的应用程序程序框架分析(上)l????????? 标准头文件StdAfx.h 在第六讲中我们已经提到了StdAfx.h,它是 构成预编译头文件的主体,现在我们就来仔细看看其中的一些语句。在FileView的“Header Files”下面找到StdAfx.h并打开它,我们可以看到几行注释下面的前六行都是编译指令,其中头两条指令用来确保StdAfx.h在同一个模块中 只被包含一次,其它头文件中也有类似的语句,接下来三条指令请大家自己在MSDN库中查一下“_MSC_VER”及“#pragma once”的含义,第六条指令定义了一个符号“VC_EXTRALEAN”,有了它之后,VC编译器在处理Windows的头文件时会剔除掉一些极少用到 的函数和数据类型,从而节省编译时间,如果我们今后“不幸”用到了这些内容,就会出现编译错误,此时只要把StdAfx.h中的这条指令注释掉就可以了。接着往下看,StdAfx.h包含了其它一些头文 件,根据注释我们知道afxwin.h中定义了MFC类库的核心部件和标准部件,并且包含了Windows头文件,afxext.h中定义了MFC类库的 扩展部件,afxcview.h中定义了各种视类,afxdisp.h中定义了MFC类库中的自动化类,afxdtctl.h定义了支持IE4引入的通用 控件的MFC类,而afxcmn.h则定义了支持Windows通用控件的MFC类。这些头文件内部的情况又如何呢?我们现在不必知道,如果将来需要的 话,可以查看MFC类库的头文件和源代码。接下来的一条语句引起了我们的注意://{{AFX_INSERT_LOCATION}}它虽然是注释,但格式却很奇怪,再下一句的注释中 解释道:VC将会在该句之前插入额外的声明,其实,这种带有两对大括号的特殊格式的注释语句在程序框架的其它源文件中还有很多,是专供VC的 ClassWizard(类向导)等工具使用的。这些工具能够自动向程序框架中加入代码(或删除代码),例如添加消息处理函数等,但是面对着程序员已经编 辑过的源代码时,它们利用什么方法来确定把代码加入到哪儿呢(即如何在源代码中定位)?VC的设计人员采用了这种特殊注释的方法(利用注释不会对编译连接 产生任何影响,心铃认为该方法非常巧妙),即从两个左向大括号开始,加上一句VC能理解的语句,最后由两个右向大括号结束,如果左右向大括号在一行中同时 出现(例如StdAfx.h中间的这一条语句),那么在此行之前定义了一个插入点,如果左右向大括号出现在两行注释中(例如ScheduleView.h 中的“//{{AFX_VIRTUAL(CScheduleView)”和“//}}AFX_VIRTUAL”),那么在这两行中间定义了一个插入范围, 其中的代码都以灰色显示,一般情况下我们都不要去修改这些代码,否则可能会导致ClassWizard的某些功能无法正常工作。l????????? 应用程序类CScheduleApp 在AppWizard生成的五个类 中,CScheduleApp代表的是我们的应用程序,它的基类CWinApp在普遍意义上代表了Windows应用程序。为什么要用一个类来表示应用程 序呢?其实这里面包含了面向对象程序设计的思想,我们可以把每一个程序都看做一个对象,把多数Windows应用程序的一些共性提取出来就形成了 CWinApp,而Schedule既是普通Windows应用程序,又具有自己的特点,所以我们从CWinApp派生出一个CScheduleApp。应用程序类(有时也称为App类)将负责完成MFC应用程序的一些例行初始化工作,另外,App类的基类是CWinThread,因此它也要负责管理程序主线程的运行,不过这项工作用不着我们去操心。在Schedule.cpp中,我们发现有下面的一条语句:CScheduleApp theApp;这条语句为CScheduleApp定义了一个 (也只能有这一个)全局对象theApp,我们知道,Windows应用程序一般从WinMain()函数执行起(心铃:这种说法其实不是非常严格,应该 说在编写Windows应用程序时,可由程序员自己控制的部分是由WinMain()函数开始的,在此之前还有一些与编程语言有关的初始化代码),而这个 全局对象在WinMain()函数之前就初始化完毕了,在进入MFC版本的WinMain()函数之后,theApp很快就获得了管理权,进行 Windows程序的一些例行初始化工作,我们能见到的一部分就是CScheduleApp::InitInstance()函数。InitInstance()函数首先调用 AfxEnableControlContainer()函数,让程序能够使用ActiveX控件,
文档评论(0)