Windows的编程模式(外文原文+中文翻译).doc
《Windows的编程模式(外文原文+中文翻译).doc》由会员分享,可在线阅读,更多相关《Windows的编程模式(外文原文+中文翻译).doc(24页珍藏版)》请在沃文网上搜索。
1、附件1:外文资料翻译译文Windows的编程模式不管您使用什么样的开发工具,Windows程序设计同已经过时的面相批命令或面向事务的程序设计已经有了根本的不同。作为开始,您必须了解一些有关Windows的基础知识,我们将参照大家数值的MS-DOS编程模式来进行介绍。尽管读者现在可能已不再编写纯粹的MS-DOS程序了,但相信读者对MS-DOS编程还是比较熟悉的。111消息处理当用C来编写MS-DOS应用程序时,最起码要又一个mian函数。当用户运行改应用程序时,操作系统会自动条用main,从这一点上讲,您可以使用任何所需要的程序结构。如果程序需要得到用户的键盘输入,或者需要使用操作系统所提供的功
2、能,那么它就可以调用适当的函数,如getchar,或者使用基于字符的窗口库。 当Windows操作系统运行程序时,它首先调用程序中的WinMain函数。因此 ,在Windows应用程序中一定要有WinMain函数,该函数一般用来完成某些特殊的任务,其中最重要的任务就是要创建该应用程序的“主窗口”。 “主窗口”中必须包含用来处理Windows所发送的消息的代码。基于Windows的程序和机遇MS-DOS的程序之前的一个最根本的差别,就在于MS-DOS程序师通过调用操作系统的功能来获得用户输入的,而Windows程序则是通过操作系统发送的消息来处理用户输入的。 说明:许多Windows开发环境,包
3、括使用Microsoft MFC库4.21版的Microsoft Visual C+5.0,都通过隐藏WinMain函数及构造消息-控制机制来简化编程。虽然使用MFC库编程不需要WinMain函数,但是弄清楚操作系统和程序之间的这种联系时最基本的要求。 许多Windows消息都经过了严格的定义,并且适用于所有的程序。例如,当窗口被创建时系统就会发送WM_CREATE消息,当用户按下鼠标的左键时就会发送WM_LBUT-TONDOWN消息,当用户敲了一个字符键时系统就会发送WM_CHAR消息,而当用户关闭窗口时系统又会发送WM_CLOSE消息。所有的消息都有32位的参数,可以保存如光标位置、键盘码
4、等这样的信息。当用户进行菜单选择和对话框按钮单击操作时,系统又会相应的发送WM_COMMAND(命令消息)给适当的窗口。命令消息的参数则完全依赖于窗口的菜单设计。您还可以定义一些自己的消息,您的程序可以向桌面上的任何窗口发送这些消息,这些用户自定义的消息实际上使C+有点像SmallTalk。您完全用不着担心如何使用这些消息与代码联系起来,因为这是应用程序框架的事情。不过需要注意的是,Windows的这种消息处理机制同事也强加给了用户程序许多固定的结构。因此,不要强迫Windows程序看起来像老式的MS-DOS,只要自己研究一下本书中的例子,读者就不难发现这些程序看起来的确与以往的程序有所不同。
5、112Windows的图形设备接口许多MS-DOS程序都直接往视频存储区或打印机端口输送数据,这种做法的不利之处在于需要对每种显示卡或打印机类型提供相应的驱动程序。Windows则提供了一个抽象的接口,称作图形设备接口(GDI)。Windows已经提供了各种显示卡及打印机的驱动程序,这样我们的程序就可以不必关心与系统相连的显示卡及打印机的类型。我们的程序可以通过调用GDI函数和硬件打交道,而各种GDI函数会自动参考被称为设备环境的数据结构。Windows会自动将设备环境结构映射到相应的物理设备,并且会提供正确的输入/输出指令。GDI在处理速度上几乎和直接进行视频访问一样快,并且它还允许Wind
6、ows的不同应用程序共享显示器。113基于资源的程序设计在MS-DOS下,为了实现数据驱动程序设计,必须将数据定义为初始化常量,或者提供单独的数据文件供程序读取。而当进行Windows程序设计时,则可以用一些特殊的格式将这些数据存储在资源文件中,这样, 连接器就可以把由C+编译器输出的二进制代码和二进制资源文件结合起来生成可执行程序。资源文件可以包含位图、图标、菜单定义、对话框设计和字符串,甚至可以包含用户自定义的格式。我们可以用文本编辑器来编辑程序,而对各种资源则常用“所见即所得”(wysiwyg)风格的工具来加以编辑。例如,我们在设计对话框时,可以首先从被称为控件箱的图标组中选取适当的元素
7、(按钮、列表框等),然后再通过鼠标来进行定位和尺寸设置。Microsoft Visual C+6.0对各种标准的资源格式都提供了图形资源编辑器。114内存管理Windows的每一个新版本中,内存管理都会比过去跟容易,如果您听过关于锁住内存句柄、形式替换程序以及内存申请管理等很繁琐的细节的话,您现在就不必担心了,因为这些都过去了。现在我们可以非常简单地申请到所需要的内存,至于细节问题则完全由Windows来控制。第十章介绍Win32所采取的内存管理技术,包括虚拟内存和内存映射文件。115动态链接库在MS-DOS环境下,所有程序的目标模块在创建过程中都被静态地连接起来。而Windows则允许动态地
8、连接,即一些特定结构的库可以再运行过程中被装入和连接,并且多个应用程序可以共享一个动态链接库(DLLs),这样可以大大节省内存和磁盘空间。同时,动态连接还可以大大提高程序的模块灵活性,因为我们可将动态连接库单独编译和调试。设计者起初创建DLL时完全是为C语言而设计的,C+则使这一问题变得有些复杂。Microsoft基本类库的开发者们已经将应用程序框架的所有类组合进了几个已经建好的动态链接库中,我们可以把应用程序框架类静态或者动态连接到我们的应用程序中,并且我们还以创建自己的基于MFC DLL的MFC扩展DLL。第二十二章详细介绍了如何创建MFC扩展DLL和常规DLL。116Win32应用程序编
9、程接口以前的Windows程序员用C语言在Win16应用程序编程接口(API)上开发应用程序。现在,如果想写32位的应用程序的话,则不管是直接还是间接,都必须使用新的Win32 API。大多数的Win16函数都有对应的Win32函数,但许多参数却有了变化如16位的参数用32位参数来替代。Win32 API还提供了许多新的函数,包括磁盘I/O函数,而在以前,磁盘操作函数是通过MS-DOS调用完成的。用16位版本的Visual C+,MFC程序员可以不管这些函数调用,因为他们只要按MFC得标准编写程序即可,而MFC的标准在Win16和Win32下都是适用的。12Visual C+的组成Visual
10、 C+包含了两套完整的Windows应用程序开发系统。如果读者愿意,仍然可以使用使用Win32 API来开发C语言写的Windows应用程序。C语言的Win32编程技术在Charles Petazold的Progamming Windows95(Microsoft Press,1996)中进行评述。我们可以利用Develop Studio和Visual C+所提供的一些新的工具(包括资源编辑器)使底层Win32程序的编写更加方便。Visual C+也包括ActiveX模块库(ActiveX Template Library,ATL),我们可以用它来开发在Internet上使用的ActiveXX
11、控件。ATL编程既不是Win32的C语言编程,也不是MFC的编程,而是非常复杂的,足够写一本书来讲述。然而本书并不是关于如何使用C语言的Win32来编程,也不是ATL编程,而是关于如何用Visual C+所提供的MFC库应用程序框架来进行C+程序设计。在这里,我们将使用Microsoft Visual C+ MFC Library Reference(Microsoft Press, 1997)书中所介绍的C+类,并将会使用应用程序框架的专用Visual C+工具,如AppWizard及ClassWizard等。说明:使用MFC库程序设计接口并不意味着您就不能使用Windows的Win32函数
12、,实际上,您几乎总是需要在MFC库程序中直接调用Win32函数。迅速地浏览一下Visual C+的各组成元素将有助于读者理解应用程序框架。图1-1描述了Visual C+应用程序的大致创建过程。121Microsoft Visual C+ 6.0和创建过程Visual Studio是一个运行于Windows及其上的集成开发环境,它是Visual C+6.0、The Visual C+ IDE、Microsoft Visual J+和其他几个产品所公用的开发环境。该IDE来源于原先的Visual Workbench,而Visual Workbench又来源于QuickC for Windows。
13、贴边窗口和可配置的工具栏,再加上一个可运行的可定制编辑器,这就是目前的Visual Studio的组成部分。联机帮助系统的工作方式则像一个Web浏览器。图1-2显示了Visual C+ 6.0工作时的情形。如果您使用过以前的Visual C+版本或者Borland IDE,那么就已经知道Visual C+ 6.0是如何工作的了,但如果您对集成开发环境还比较陌生的话,则必须弄清楚什么是项目。“项目”是一些相关联的源文件的集合,这些源文件经过编译、连接,然后被组合在一起形成可执行的Windows应用程序或者是DLL。项目源文件一般被存储在一个单独的子目录中,但它也需要依赖于孩子目录之外的许多文件,
14、如包含文件和库文件。熟练地程序员对于make文件不会感到陌生。make文件包岑了编译器和连接器的参数选项,还表述了所有文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模块及库等)。创建程序(make程序)首先读取make文件,然后再激活编译器、汇编器、资源编译器和连接器以便产生最好的输出。最好输出并生成的通常是可执行文件。创建程序利用内置的推理规则来激活编译器,以便通过对特定CPP文件的编译来产生特定的OBJ文件。在Visual C+6.0的项目中,没有make文件(后缀为MAK),除非我们专门输出一个,但一个文本格式的项目文件(后缀为DSP)有着同样的功能。一个独
15、立的文本格式的工作空间文件(workspace,后缀为DSW)对工作空间中的每一个项目都有一个入口,在一个工作空间中可以有多个项目,不过本书中的所有例子的工作空间只有一个项目。要在一个已经存在的项目上继续工作,只要Visual C+中打开相应的DSW文件,然后就可以编辑和编译该项目了。Visual C+也会建立许多中间文件,下表列出了在Visual C+工作空间里产生的文件:122资源编辑器-Workspace ResourceView当单击Visual C+的Workspace窗口中的ResourceView标签时,我们就可以选择一个资源进行编辑,主窗口会自动为该类型的资源选择适当的资源编辑
16、器。该窗口会为菜单选择一个所见即得的编辑器,为对话框选择一个功能很强的图形编辑器,并有一些工具可用于编辑图标、位图和字符串。对话框编辑器可以插入标准Windows空间和新的Windows通用控件,也可以插入ActiveX控件。第三章显示了ResourceView的一幅图及一个资源编辑器(对话框编辑器)。每一个项目通常都有一个文本格式的资源描述(RC)文件,该文件描述了项目的菜单、对话框、字符串和热键资源。RC文件也有#include语句可以将位于其他子目录下的资源包含进来。这些资源包括与该项目相关的项,如位图(BMP)和图标(ICO)文件,以及对所有Visual C+程序通用的资源,如错误信息
17、串等。在资源编辑器以外RC文件进行编辑是不提倡的。资源编辑器也可以EXE喝DLL文件,因此我们可以用剪贴板来“偷”资源,如其他Windows应用程序的位图和图标等。123C/C+编译器VisualC+的编译器可以处理C和C+源代码,它通过源代码文件名的后缀来识别代码本身所使用的语言。C后缀代表C源代码,CPP或CXX则代表C+源代码。该编译器与所有的ANSI标准兼容,包括C+库工作组的最新建议,还增加了一些Microsoft扩充内容。VisualC+6.0版还支持模版(template)、异常(exception)和运行时类型识别(runtime typeidentification,RTTI
18、)。新的C+标准模板库(Standard Template Library,STL)也被包括了进来,但它并没有集成到MFC库中。124资源编译器VisualC+资源编译器从资源编辑器读取一个ASCII资源描述(RC)文件,并生成一个二进制RES文件提供给连接器。125连接器连接器读入由C/C+编译器产生的OBJ文件和有资源编译器的RES文件,同时处理MFC的LIB库文件、运行时库代码及Windows代码,然后产生项目的EXE文件。有一个增量连接选项(incremental link option)可以再源程器变化不大的情况下减少执行的时间。由于MFC头文件中包含的#pragma语句(特殊的编译
19、指示)已指定了所要求的库文件,所以我们不必再告诉连接器该读哪些库。126调试器如果程序被第一运行,则用不着使用调试器,可是以后就少不了一次又一次的使用调试器了。VisualC+调试器的稳定性有了很大提高,但当然仍不可能修正所有的错误。调试器和Develpoer Studio紧密配合以便保证断点可以被保存在磁盘上。通过工具栏按钮可以插入和删除断点,控制单步执行。图13显示了正在运行的VisualC+调试器,注意,Variable和Watch窗口可将对象指针展开以便显示出派生类和积累的所有数据成员。如果我们把光标放在简单变量的位置上,则调试器还会在一个小窗口中显示它的值。为了能够对程序进行调试,在
20、创建程序时必须设置相应的编译器和连接器的选项,以便产生相应的可调试信息。127AppWizardAppWizard是一个代码生成器,它会按照用户通过对话框指定的特性、类名及源代码文件名来产生Windows应用程序的工作构架。我们在学习本书中所提供的例子时需要经常使用AppWizard。不过,不要把AppWizard同以前的那种可以为应用产生所有代码的代码生成器混淆起来。AppWizard所产生的代码只是一些基本代码,它所完成的功能则完全由应用程序框架的基类所决定。AppWizard可以使用户很快地开始一个新的应用程序。高级的用户开发者可以建立定制的AppWizard,Microsoft公司已经
21、公开了用于生成项目的宏系统。如果用户需要建立很多带有远程通讯接口的项目,则可以建立一个特制的向导来自动完成这一过程。128ClassWizardClassWizard(它是通过DLL来实现的)可以通过Developer Studio的View菜单来运行,它极大的方便了VisualC+类代码的编辑工作。想添加新的类或新的虚拟函数,或新的Windows消息控制函数吗?ClassWizard能够给出原型、函数体以及将消息同应用程序框架相联系的相应代码。ClassWizard还可以用来对用户自己编写的类的代码进行修改,这就解决了令一般代码生成器感到头疼的维护问题。有些ClassWizard的特性可以通
22、过Developer Studio WizardBar工具栏来实现,见图1-2。129源程序浏览器如果某个程序使我们从头到尾编写的,那么我们一定会对其中的源代码文件、类及成员函数了如指掌,但如果遇到了别人编写的程序,我们若想搞清楚就需要一些帮助了。VisualC+的源程序浏览器(简称“浏览器”)能够使我们从类或函数的角度来了解(和编辑)程序,而不是直接从文件入手,这有点像其他的面向对象库(如Smalltalk)的“检查器”。 浏览器有如下几种查看状态:Definitions and References如果选择任何函数、变量、类型、宏定义或者类,都会马上看到它是在项目中的什么地方定义的,并且在
23、哪些地方用到了它。 Call Graph/Caller Graph对于所选择的函数,给出它的调用与被调用函数的图示。 Derived Class Graph/Base Class Graph给出类层次关系的图形表示。对于所选择的类,我们可以看到它的派生类或者基类以及成员,并且可以利用鼠标来控制层次结构的扩展。File Outlin一对于所选择的文件,列出文件中的类、函数和数据成员,同时还同步显示它们定义的位置和在项.目中使用的位置。第三章中给出了一个典型的浏览器窗口。说明:如果我们重新安排了源代码文件中的代码行,则Visual C+6.0会在重新编译连接时更新浏览器数据库。但这会增加编译连接的
24、时间。 除了浏览器之外,Visual C+还有一个C1assView的选项,它不依赖于浏览器数据库。我们可以在ClassView窗口中看到项目中所有类的树状视图,可以显示成员函数和数据成员。在每个小单元上双击鼠标,可以立即切换到相应的源代码。然而,ClassView,不能显示层次信息,而浏览器则可以。1.2.10联机帮助Visual C+ 6.0包含一个全新的基于HTML的联机帮助系统。每一个主题都用一个独立的HTML文档来表达,而且所有的主题都组织起来,根据索引文件(IVI),形成了InfoViewer标题文件(IVT) o InfoView窗口使用了从Microsoft Internet
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows 编程 模式 外文 原文 中文翻译