您的位置:首页 > 其它

第二讲:Windows应用程序框架

2015-11-26 01:02 260 查看
Windows应用程序设计基础

Windows程序设计是一种完全不同于传统的DOS方式的程序设计方法,其内部运行原理是一种事件驱动方式的程序设计模式,主要是基于消息的。当用户需要完成某种功能时会调用操作系统的某种支持,然后操作系统将用户的需要包装成消息,并投递到消息队列中,最后应用程序从消息队列中取得消息并进行响应,其流程如图所示。



WindowsAPI

Windows程序设计中,在应用程序中要完成某个功能,都是以函数调用的形式实现的。这些函数的集合就是Windows操作系统提供给应用程序编程的接口(Application Programming Interface),简称Windows API。




[b]句柄

[/b]

在Windows编程中读者将频繁接触到一个称为句柄(HANDLE)的概念。Windows程序中产生的任何资源(要占用某一块或大或小的内存),如图标、光标、窗口和应用程序的实例(已加载到内存运行中的程序)等。操作系统每产生一个这样的资源时,都要将它们放入相应的内存,并为这些内存指定一个唯一的标识号。这个标识号即是该资源的句柄。
比如在大街上来来往往的汽车,有许多是相同型号、相同品牌的,也有许多是不同型号、大小的汽车,那么如何分辩某一辆汽车是属于谁的呢?就是通过车牌号。因为车牌号是唯一的,那么车牌号就是汽车这个资源的句柄,如图所示。



消息及消息队列

在应用程序中,用户所有的操作都是通过消息机制(Message)来传递给操作系统的,操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序。例如用户在某个程序活动时按了一下键盘,操作系统马上能感知到这一事件,并且能够知道用户按下的是哪一个键。操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序。由应用程序决定如何对这一事件作出反应,对事件作出反应的过程就是消息响应。
消息与应用程序

在Windows编程中,消息与应用程序的关系如图所示。



MFC应用程序框架

应用程序框架是一个集合,其可以提供一般应用程序所需的全部面向对象软件组件。或者说,一个应用程序框架是一个类库的超级集合。一个应用程序框架不同于单纯的类的集合,其自己定义了程序的结构。
比如奔驰汽车的生产厂家,其可以生成所有的奔驰汽车的零件,并有其自己的生产线,那么这个厂家就是一个应用程序框架。在这个框架中,可以生产出很多型号的奔驰汽车,如图所示。


MFC简介

MFC即微软基本类库,其位于任何Windows API之上。在这个类库中包含了一百多个程序开发过程中最常用到的对象。形象地说,MFC就是一个人才管理中心。其中有许许多多掌握了各种技能的人,有工程师、教师、医生等。当社会需要某种技能的人时,就从该MFC中取出并应用到环境中,如图所示。



MFC应用程序框架说明

打开前面创建的Hello World工程的工作区,可以看到系统在生成应用程序框架的过程中,自动生成了以下几个类。
CHelloWorldApp;
CMainFrame;
CHelloWorldView;
CHelloWorldDoc。
这些类在工程Hello World工作区上的显示如图所示。



CHelloWorldApp

CHelloWorldApp的基类为CWinApp。如果需要创建MFC应用程序,首先要使用CWinApp类,因为CWinApp类不仅代表了程序中运行的主线程,而且代表了应用程序本身。在任何MFC应用程序中只有一个CWinApp对象,用于控制应用程序的初始化、启动应用程序、运行主消息循环、终止应用程序。



CMainFrame

类CMainFrame的基类为CFrameWnd。其是由MFC中的CFrameWnd派生来的,所以它也是一个框架窗口。主框架窗

口类负责标题栏、菜单栏工具栏及状态栏的生成。事实上,这些子窗口是可以按照用户的意图自定义的,只需要修改

主框架窗口的实现文件即可。

CHelloWorldView类和CHelloWorldDoc类

CHelloWorldView类的基类为CView,而CHelloWorldDoc类的基类为CDocument。之所以把CHelloWorldView类和

CHelloWorldDoc类一起介绍是因为这两个类是密切相关的。

视图是显示文档数据的界面,它主要占据着主框架窗口的客户区,视图类不仅把程序文档数据显示出来,它还能接受

用户的输入、编辑。视图对象也通过消息与主框架、文档对象相互操作。

文档与视图的关系

文档对象是存储程序数据的地方。一般来说,把要存储的数据放到文档对象中,即把要存储的数据作为文档对象的成

员变量,进而实现文档的串行化。文档与视图的关系如图所示。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: