欢迎来到天天文库
浏览记录
ID:33698165
大小:118.38 KB
页数:32页
时间:2019-02-28
《windows运行原理以及mfc框架分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、1Windows程序运行原理我们这趟课主要是讲一下Windows程序的内部运行原理,大家都知道,VC卄是Windows开发语言,要理解visoC++的开发过程,先耍理解Windows程序内部运行机制。我们要明白在Windows环境下和在其它操作系统环境下编程的根本性区别,全面地了解Windows的内部运行机制将需要一本书的容量,我没有必要深入了解每一个技术细节,但是对于Windows程序基本的运行机制,是一个VC++程序员必需要掌握的知识。我们看一下这幅图,这幅图是应用程序和操作系统和硬件输入输出设备之间交互的一个图,Windows的程序是一个完全不
2、同于传统的Dos程序的设计方法,它是一种事件驱动方式的程序设计模式,主要是基于消息的,当用户需要完成某种功能时,需要调用操作系统的某种支持,然后操作系统将用户需要操作包装成消息,并投递到消息队列中,最后应用程序从消息队列中取走消息,并进行响应。向下的箭头[表示操作系统能操作输出设备,以执行特定的功能,例如,让声卡发出声音,让显卡画出图形。向上的箭头2表示操作系统能感知输入设备状态的变化,如鼠标移动和键盘按下等,并且能够知道鼠标移动的具体位置和键盘按下的具体键位。这就是操作系统和计算机硬件的交到关系,应用程序开发者通常不需要知道其具体的实现细节,我们所
3、关心的仅仅是应用程序和操作系统之间的交互关系。1.1API的定义那么,应用程序是如何通知操作系统执行某个功能的呢?有过编程经验的读者都应该知道,在应用程序中要完成某个功能,都是以函数调用的形式实现的,同样,应用程序也是以函数调用的方式来通知操作系统执行相应的功能的。操作系统所能够完成的每个特殊功能通常都有一个函数与其对应,也就是说,操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用,这些函数的集合就是Windows操作系统提供给应用程序编程的接口(ApplicationProgrammingInterf
4、ace),简称WindowsAPECreateWindow就是一个APT函数,应用程序中调用这个函数,操作系统就会按照该函数提供的参数信息产生一个相应的窗口。那么我们不要把这里的API和javaAPT,或者说英它的系统的API混淆,API正如其语义一样,它已经被称为一种被广乏使用的俗语,如果说某个系统、某个设备提供给应用程序进行操作函数、类、主键等的集合,那么就称作该系统的API。我们通常在做呼叫中心的时候,我们知道,我们可以买一个语音卡,通常一个语音卡会提供一个开发包,那么它所提供的开发包的一些函数的集合,我们就可以把它叫做这种语音卡的APTo1.
5、2消息及其消息队列向上的箭头④表示操作系统能够将输入设备的变化上传给应用程序。如用户在某个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应。好比有个蚊子叮了我们一口,我们的神经末梢(相当于操作系统)马上感知到这一事件,并传递给了我们的大脑(相当于应用程序),我们的大脑最终决定如何对这一事件作出反应,如将蚊子赶走,或是将蚊子拍死。对事件作出反应的过程就是消息响应。那么操作系统是怎样将感知到的事件传递给应用程
6、序的呢?这是通过消息机制(Message)来实现的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,我们可以参看一下MSDWMSDN是微软提供给我们的一个在线帮助系统,这个在线帮助系统提供了所有微软提供的开发语言、开发工具等的帮助文件,它的信息量相当全,而且相当专业(这里介绍一下MSDN),再说明一下如何使用MSDNoMSG结构定义如下:typedefstructtagMSG{HWNDhwnd;UINTmessage;WPARAMwParam;LPARAM1Param;DWORDtime;POTNTpt;}MSG;笫一个成员变量
7、hwnd即代表消息所属的窗口,一个消息一般都是与某个窗口相联系的,如在某个活动窗口中按下键盘,该键盘消息就是发给该窗口的,在VC中,用HWND变量类型来标识窗口。有关窗口的知识,在稍后有详细解释。第二个成员变量message代表消息代号,无论是键盘按下,还是鼠标移动,都是用一个数字来表示的,不同的数值对应不同的消息。由于数值不便于记忆,在VC中将消息对应的数值定义为WM_xxx宏的形式,xxx对应某种消息的英文拼写的大写,如鼠标移动消息为WM_MOUSEMOVEZ键盘按下消息为WM_KEYDOWN,输入一个字符消息为WM_CHAR等等。我们在程序屮一
8、般以WM_xxx宏的形式来使用消息。(提示:如果想知道WM_xxx消息对应的具体数值,请在程序中选中WM_x
此文档下载收益归作者所有