1. Windows应用程序设计基础
(1)内部运行原理是一种事件驱动方式的程序设计模式,主要是基于消息的。当用户需要完成某种功能时,会调用操作系统的某种支持,然后操作系统将用户的需要包装成消息,并投递到消息队列中,最后应用程序从消息队列中取得消息并进行相应。其流程如图1.1所示:
(2)Windows API:Windows程序设计中,在应用程序中要完成某个功能,都是以函数调用的形式实现的。这些函数的集合就是Application Programming Interface,简称Windows API。
(3)句柄(Handle):Windows程序中产生的任何资源(要占用某一块或大或小的内存),如图标、光标、窗口和应用程序的实例(已加载到内存运行中程序)等。操作系统每产生一个这样的资源时,都要将它们放入相应的内存,并为这些内存指定一个唯一的标识号。这个标识号即是该资源的句柄。
(4)消息及消息队列
在应用程序中,用户所有的操作都是通过消息机制(Message)来传递给操作系统的,操作系统将每个事件都包装成一个消息的结构体MSG来传递给应用程序。
例如用户在某个程序活动时按了一下键盘,操作系统马上能感知到这一事件,并且能够知道用户按下的是哪一个键。操作系统并不决定对这一事件如何做出反应,而是将这一事件转交给应用程序。有应用程序决定如何对这一事件做出反应,对事件做出反应的过程就是消息响应。
在Windows编程中,消息与应用程序的关系如图所示:
2. MFC应用程序框架
(1)应用程序框架是一个集合,其可以提供一般应用程序所需要的全部面向对象软件组件。或者说,一个应用程序框架是一个类库的超级集合。一个应用程序框架不同于单纯的类的集合,其自己定义了程序的结构。
(2)MFC即微软基本类库,其位于任何Windows API之上。在这个类库中包含了一百多个程序开发过程中最常用到的对象。
3. MFC应用程序框架说明
(1) 单文档应用程序:CXXXApp(应用程序类)、CMainFrame(主框架)、CXXXView(视图类)、CXXXDoc(文档类)
(2) CXXXApp类的基类是CWinApp。如果创建MFC应用程序,首先要使用CWinApp类,因为CWinApp类不仅代表了程序中运行的主程序,而且代表了应用程序本身。在任何MFC应用程序中只有一个CWinApp对象,用于控制应用程序的初始化、启动应用程序、运行主消息循环、终止应用程序。(3) 类CMainFrame的基类为CFrameWnd。其是由MFC中的CFrameWnd派生来的,所以它也是一个框架窗口。主框架窗口类负责标题栏、菜单栏、工具栏以及状态栏的生成。事实上,这些子窗口是可以按照用户的意图自定义的,只需要修改主框架窗口的实现文件即可。
(4) CXXXView类的基类为CView,而CXXXDoc类的基类为CDocument。视图类和文档类是密切相关的。
视图是现实文档数据的界面,它主要占据着主框架窗口的客户区,视图类不仅把程序文档数据显示出来,它还能接受用户的输入、编辑。视图对象也通过消息与主框架、文档对象相互操作。
(5) 文档与视图的关系:文档对象是存储程序数据的地方。一般来说,要把存储的数据放到文档对象中,即把要存储的数据作为文档对象的成员变量,进而实现文档的串行化。文档与视图的关系如图所示:
4. 综合练习
CXXXView类中的OnDraw函数实现窗口的重绘。
TextOut方法是CDC中的成员函数。返回值为BOOL类型
5. 思考和习题
(1)什么是API?
是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组历程的能力,而又无需访问源码,或理解内部工作机制的细节。
(2)句柄的作用是什么?
句柄实际上是一个标识符,是用来标识对象或者项目的,句柄是一个32为的正整数,它来识别窗体或其他对象。
(3)消息机制的作用是什么?
以事件消息驱动的方式实现程序的运行。
(4)什么是MFC?其作用是什么?
(5)如何创建一个基于MFC的应用程序框架?
(6)系统在生成应用程序框架的过程中,主动生成了几个类?其分别是?
CXXXApp类、CXXXView类、CXXXDoc类CAboutDlg类
(7)分别说出生成框架时创建的4个类的作用?