- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE 32
1 Windows程序运行原理
我们这趟课主要是讲一下Windows程序的内部运行原理,大家都知道,VC++是Windows开发语言,要理解visoC++的开发过程,先要理解Windows程序内部运行机制。我们要明白在Windows环境下和在其它操作系统环境下编程的根本性区别,全面地了解Windows的内部运行机制将需要一本书的容量,我没有必要深入了解每一个技术细节,但是对于Windows程序基本的运行机制,是一个VC++程序员必需要掌握的知识。
我们看一下这幅图,这幅图是应用程序和操作系统和硬件输入输出设备之间交互的一个图,Windows的程序是一个完全不同于传统的Dos程序的设计方法,它是一种事件驱动方式的程序设计模式,主要是基于消息的,当用户需要完成某种功能时,需要调用操作系统的某种支持,然后操作系统将用户需要操作包装成消息,并投递到消息队列中,最后应用程序从消息队列中取走消息,并进行响应。向下的箭头1表示操作系统能操作输出设备,以执行特定的功能,例如,让声卡发出声音,让显卡画出图形。向上的箭头2表示操作系统能感知输入设备状态的变化,如鼠标移动和键盘按下等,并且能够知道鼠标移动的具体位置和键盘按下的具体键位。这就是操作系统和计算机硬件的交到关系,应用程序开发者通常不需要知道其具体的实现细节,我们所关心的仅仅是应用程序和操作系统之间的交互关系。
1.1 API的定义
那么,应用程序是如何通知操作系统执行某个功能的呢?有过编程经验的读者都应该知道,在应用程序中要完成某个功能,都是以函数调用的形式实现的,同样,应用程序也是以函数调用的方式来通知操作系统执行相应的功能的。操作系统所能够完成的每个特殊功能通常都有一个函数与其对应,也就是说,操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用,这些函数的集合就是Windows操作系统提供给应用程序编程的接口(Application Programming Interface),简称 Windows API。如CreateWindow就是一个API函数,应用程序中调用这个函数,操作系统就会按照该函数提供的参数信息产生一个相应的窗口。那么我们不要把这里的API和java API,或者说其它的系统的API混淆,API正如其语义一样,它已经被称为一种被广乏使用的俗语,如果说某个系统、某个设备提供给应用程序进行操作函数、类、主键等的集合,那么就称作该系统的API。我们通常在做呼叫中心的时候,我们知道,我们可以买一个语音卡,通常一个语音卡会提供一个开发包,那么它所提供的开发包的一些函数的集合,我们就可以把它叫做这种语音卡的API。
1.2 消息及其消息队列
向上的箭头④表示操作系统能够将输入设备的变化上传给应用程序。如用户在某个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应。好比有个蚊子叮了我们一口,我们的神经末梢(相当于操作系统)马上感知到这一事件,并传递给了我们的大脑(相当于应用程序),我们的大脑最终决定如何对这一事件作出反应,如将蚊子赶走,或是将蚊子拍死。对事件作出反应的过程就是消息响应。
那么操作系统是怎样将感知到的事件传递给应用程序的呢?这是通过消息机制(Message)来实现的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,我们可以参看一下MSDN。MSDN是微软提供给我们的一个在线帮助系统,这个在线帮助系统提供了所有微软提供的开发语言、开发工具等的帮助文件,它的信息量相当全,而且相当专业(这里介绍一下MSDN),再说明一下如何使用MSDN。
MSG结构定义如下:
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
第一个成员变量hwnd即代表消息所属的窗口,一个消息一般都是与某个窗口相联系的,如在某个活动窗口中按下键盘,该键盘消息就是发给该窗口的,在VC中,用HWND变量类型来标识窗口。有关窗口的知识,在稍后有详细解释。
第二个成员变量message代表消息代号,无论是键盘按下,还是鼠标移动,都是用一个数字来表示的,不同的数值对应不同的消息。由于数值不便于记忆,在VC中将消息对应的数值定义为WM_xxx宏的形式,xxx对应某种消息的英文拼写的大写,如鼠标移动消息为WM_MOUSE
原创力文档


文档评论(0)