设为首页 加入收藏

TOP

3.1.4 MFC程序结构分析
2013-10-06 23:57:36 来源: 作者: 【 】 浏览:74
Tags:3.1.4 MFC 程序 结构 分析
3.1.4  MFC程序结构分析
MFC作为微软应用程序的框架,举足轻重。MFC是C++(www.cppentry.com)的Win32 API。更重要的是,它提供了文档/视图框架;sdk编程(www.cppentry.com)中的 wndproc也变成了方便的消息映射;令人恐惧的设计精妙的宏。
1.Windows程序工作原理
Windows程序设计是一种完全不同于传统的DOS方式的程序设计方法,它是一种事件驱动方式的程序设计模式。在程序提供给用户的界面中有许多可操作的可视对象。用户从所有可能的操作中任意选择,被选择的操作会产生某些特定的事件,这些事件发生后的结果是向程序中的某些对象发出消息,然后这些对象调用相应的消息处理函数来完成特定的操作。Windows应用程序的最大特点就是程序没有固定的流程,而只是针对某个事件的处理有特定的子流程,Windows应用程序就是由许多这样的子流程构成的。
从上面的讨论中可以看出,Windows应用程序在本质上是面向对象的。程序提供给用户界面的可视对象在程序的内部一般也是一个对象,用户对可视对象的操作通过事件驱动模式触发相应对象的可用方法。程序的运行过程就是用户的外部操作不断产生事件,这些事件又被相应的对象处理的过程。
2.建立应用程序
在“Build”菜单中选择“Rebuild All”菜单项,系统开始编译由AppWizard自动生成的程序框架中所有文件中的源代码,并且链接生成可执行的应用程序。按“Ctrl+F5”,应用程序就开始运行了,虽然我们没有编写一行代码,但是可以看出由系统自动生成的应用程序的界面已经有了一个标准Windows应用程序所需的几个组成部分,我们要做的事情是往这个应用程序中添加必要的代码以完成我们所需要的功能。
接下来将要来介绍Windows下自动生成的这个应用程序框架,让我们对MFC方式的Windows应用程序的工作原理有全面的认识,只有这样才知道应该如何往程序框架当中添加需要的代码。
3.程序结构剖析
使用MFC方式的应用程序的4个主要类之间的关系。
CMYAPP类主要的作用是用来处理消息的,它统一管理程序收到的所有的消息,然后把消息分配到相应的对象。CMAINFRAME是CMYVIEW的父类,也就是说视窗VIEW显示在主框窗MAINFRAME的客户区中。类CMYVIEW的作用是显示数据,而数据的来源是类CMYDOC,在MFC程序中,程序的数据是放在文档当中的,而显示数据则是利用视窗方式,文档与视窗分离带来的好处就是一个文档可以同时具有多个视窗,每个视窗只显示文档中的一部分数据,或者以特定的风格显示文档中的数据。文档与视窗分离的另一个好处就是在程序中可以处理多个文档,通过对不同的视窗的处理达到对不同的文档分别处理的目的。
使用过传统的Windows编程(www.cppentry.com)方法的人都知道,在应用程序中有一个重要的函数WinMain(),这个函数是应用程序的基础,用户操作所产生的消息正是经过这个函数的处理派送到对应的对象中进行处理的。在MFC方式的Windows应用程序中,用来处理消息的是系统自动生成的MFC中的类CWINAPP的派生类CMYAPP,下面就从这个类开始介绍应用程序的框架。
(1)类CMYAPP
类CMYAPP是应用程序运行的基础,这个类是由MFC中的类CWINAPP派生来的。在这个类中除了有一般类都有的构造函数,一个重要的成员函数就是INITINSTANCE,我们知道,在Windows环境下面可以运行同一程序的多个实例,函数INITINSTANCE的作用就是在生成一个新的实例的时候,完成一些初始化的工作。
下面研究INITINSTANCE函数所做的事情,我们开始定义了一个文档模板对象指针PDOCTEMPLATE,通过NEW操作符,系统动态生成了这个文档模板对象,然后使用ADDDOCTEMPLATE函数把这个文档模板对象加入到应用程序所维护的文档模板链表当中,这个文档模板PDOCTEMPLATE的作用就是把程序用到的框架窗口,CMAINFRAME,文档CMYDOC,视窗CMYVIEW与应用对象CMYAPP联系起来。
CMYAPP类提供了用户与Windows应用程序之间进行交流的界面。在生成这个类的对象后,这个对象自动地把自身与Windows系统建立联系,接收Windows传送的消息,并交给程序中相应的对象去处理,这就免去了程序员许多的工作,使得开发C++(www.cppentry.com)的Windows程序变得简单方便。
(2)类CMAINFRAME
类CMAINFRAME是由MFC中的CFRAMEWND派生来的,所以它也是一个框架窗口。前面已经指出,CMAINFRAME是类CMYVIEW的父类,也就是说CMYVIEW类的对象显示在主框架窗口的客户区中。在类CMAINFRAME中,系统已经从类CFRAMEWND那里继承了处理窗口的一般事件的Windows消息,比如改变窗口的大小,窗口最小化等的成员函数,因此编程(www.cppentry.com)的时候程序员不需要再关心此类消息的处理,从而减轻了程序员的负担。当然,如果确实需要重新编写处理此类消息的成员函数,则需要对原有的成员函数进行重载。
在MFC程序中,我们并不需要经常对CMAINFRAME类进行操作,更多的是对视窗类进行操作,达到对程序中的数据进行编辑和修改的目的。
最后要指出的是,在MFC方式的程序中,当程序的一个实例被运行的时候,系统根据前面在CMYAPP类中介绍的文档模板对象自动生成类CMAINFRAME,CMYVIEW,CMYDOC的对象,而不需要程序员主动地去创建这些类的对象。
(3)类CMYVIEW与CMYDOC
之所以把CMYVIEW类和CMYDOC类放一起来介绍,是因为这两个类是密切相关的,文档是由文档模板对象生成的,并由应用程序对象管理,而用户则是通过与文档相联系的视窗对象来存储、管理应用程序的数据,用户与文档之间的交互则是通过与文档相关联的视窗对象来进行的。
生成一个新的文档的时候,MFC程序同时生成一个框架窗口,并且在框架窗口的客户区中生成一个视窗对象作为框架窗口的子窗口,这个子窗口以可视化的方式表现文档中的内容。视窗的重要功能就是负责处理用户的鼠标、键盘等操作,通过对视窗对象的处理达到处理文档对象的目的。
要指出的一点是,Windows应用程序分单文档界面SDI和多文档界面MDI两种,在单文档界面中,文档窗口与主框架窗口是同一概念。而这时的视窗对象则是显示在文档窗口的客户区当中。前面生成的test程序使用的就是单文档界面方式,此时文档窗口是主框架窗口,即类CMAINFRAME的对象。
【责任编辑:雪花 TEL:(010)68476606-8007】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.1.6 MFC库消息映射 下一篇3.2.3 Visual C++工程文件的组成

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: