windows应用程序,操作系统,计算机硬件之间的相互关系———消息队列

cout    西奥特   预定义好的输出流对象
<<   插入运算符
iosream   io死追不   输入输出流


============================================
windows应用程序,操作系统,计算机硬件之间的相互关系


应用程序   ----消息队列
     
   |   |
 3 |  4|
操作系统
   |   |
 1 |  2|
输入输出设备






向下的箭头3表示应用程序可以通知操作系统执行某个具体的任务,如操作系统能控制声卡发出声音,但它并不知道应该何时发出何种声音,需要应用程告诉操作系统该发出什么样的声音,这个关系好比有个机器人能够完成行走的功能,但是,如果人们不告诉它往哪个方向走,机器人是不会主动行走的。这里的机器人就是操作系统,人们就是应用程序。




应用程序是如何通知操作系统执行某个功能的呢?
是以函数调用的形式实现的,也就是说操作系统吧它能够完成的功能已函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用,


   关于消息及消息队列
向上的箭头4表示操作系统能够将输入设备的变化上传给应用程序,如用户在某一个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应。好比有个蚊子叮了我们一口,我们的神经末(相当于操作系统)马上感知到这一事件,并传递给我们的大脑(相当于应用程序),我们的大脑最终决定如何对这一事件作出反应,如将蚊子赶走,或是将蚊子拍死,对。事件作出反应的过程就是消息响应。


消息队列,每个应用程序操作系统都会给他建立一个消息队列。消息队列是一个先进先出的缓冲区。某种变量类型的数组,消息队列里的每个元素它都是一条消息。操作系统将生成的每个消息按先后顺序放入消息队列里,第一条放入第一元素,第二条放入第二元素里以此类推。应用程序总是取走第一条消息,消息取走后第二条变成第一条剩余的消息依次前移,应用程序取得消息后,便能知道用户的操作和程序状态的变化,例如应用程序从队列中取得一条w按下消息,那一定是用户输入了一个字符,并且知道输入的是哪个字母,通过附加消息参数就能知道。应用程序得到消息之后就要对消息进行处理,这就是我们通常所说的消息响应,消息响应是通过编码实现的。这就是win程序的主要代码区了,当收到消息后会编写一些针对特定消息的特定代码这个过程就叫消息响应。在消息响应代码中我们很可能又要调用操作系统提供的其他api函数以便完成一个特定的功能。例如我们收到窗口关闭的消息,那么我们就可以调用窗口销毁这样一个api函数去关闭该窗口,或者用一个弹出消息框的函数来提示用户是否真的关闭窗口
要知道2个东西,一个是消息本身,要知道不同的消息所代表的用户操作和程序的状态
               二要知道对于一个特定消息,我们要让操作系统执行某个特定的功能去响应这个消息




操作系统是怎样将感知到的事件传递给应用程序的呢?这是通过消息机制(Message)来实现的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,参看msdn


MSG结构定义如下:
typedef atruct tagMSG{
                 HWND  hwnd;          窗口句柄
无符号的整形    UINT  message;       消息表示一个具体的消息如按键按下或鼠标左键他们是以数值                                      表示的为了方便记忆 (整数型) 
                                      微软定义了一些宏,通过宏表示数值,宏以WM开头


整数型          WPARAM wParam;       关于消息的附加信息
                                     为什么需要附加消息,比如按下字母的A建,不关按下哪个键
                                     它收到的消息都是按下消息,但它不知道按下的是哪个字母,
                                     如果想要知道按下哪个字母的话,它会将字母的ascll码放到
                                     消息的附加消息上
整数型          LPARAM lparam;       关于消息的附加信息
32位的整数      DWORD  time;         消息被传递出去的时间
结构体类型      POINT  pt;           是一个点的结构体,消息被投递的时候光标在屏幕的位置
                                      【x坐标和y坐标】
}MSG;




句柄,资源的标识
操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。按资源的类型,又可将句柄细分成图标句柄(HICON),光标句柄(HCURSOR),窗口句柄(HWND),应用程序实例句柄(HINSTACE)等等各种类型的句柄。操作系统给每一个窗口指定的一个唯一的标识号即窗口句柄




  从变量的类型区分变量的用途
如用
int x,y;
x=30; y= 30;
//x和y即可用表示坐标点也可以表示宽度和高度。
我们可以用
typedef int width     //宽度
typedef int height    //高度
width x;
height y;








typedef
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

你可能感兴趣的:(驱动)