Windows消息机制初谈

原创 2002年11月20日 08:52:00
Windows系统是一个消息驱动的OS,什么是消息呢?我很难说得清楚,也很难下一个定义(谁在嘘我),我下面从不同的几个方面讲解一下,希望大家看了后有一点了解。
1、消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单转中之后会有WM_COMMAND消息发送,WPARAM的高字中(HIWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。当然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。
2、谁将收到消息:一个消息必须由一个窗口接收。在窗口的过程(WNDPROC)中可以对消息进行分析,对自己感兴趣的消息进行处理。例如你希望对菜单选择进行处理那么你可以定义对WM_COMMAND进行处理的代码,如果希望在窗口中进行图形输出就必须对WM_PAINT进行处理。
3、未处理的消息到那里去了:M$为窗口编写了默认的窗口过程,这个窗口过程将负责处理那些你不处理消息。正因为有了这个默认窗口过程我们才可以利用Windows的窗口进行开发而不必过多关注窗口各种消息的处理。例如窗口在被拖动时会有很多消息发送,而我们都可以不予理睬让系统自己去处理。
4、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口都会有自己的窗口过程,所以用户的输入就会被正确的处理。例如有两个窗口共用一个窗口过程代码,你在窗口一上按下鼠标时消息就会通过窗口一的句柄被发送到窗口一而不是窗口二。
5、示例:下面有一段伪代码演示如何在窗口过程中处理消息
LONG yourWndProc(HWND hWnd,UINT uMessageType,WPARAM wP,LPARAM)
{
switch(uMessageType)
{//使用SWITCH语句将各种消息分开
case(WM_PAINT):
doYourWindow(...);//在窗口需要重新绘制时进行输出
break;
case(WM_LBUTTONDOWN):
doYourWork(...);//在鼠标左键被按下时进行处理
break;
default:
callDefaultWndProc(...);//对于其它情况就让系统自己处理
break;
}
}
接下来谈谈什么是消息机制:系统将会维护一个或多个消息队列,所有产生的消息都回被放入或是插入队列中。系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。而在没有消息时消息循环就将控制权交给系统所以Windows可以同时进行多个任务。下面的伪代码演示了消息循环的用法:
while(1)
{
id=getMessage(...);
if(id == quit)
break;
translateMessage(...);
}
当该程序没有消息通知时getMessage就不会返回,也就不会占用系统的CPU时间。 图示消息投递模式
在16位的系统中系统中只有一个消息队列,所以系统必须等待当前任务处理消息后才可以发送下一消息到相应程序,如果一个程序陷如死循环或是耗时操作时系统就会得不到控制权。这种多任务系统也就称为协同式的多任务系统。Windows3.X就是这种系统。
而32位的系统中每一运行的程序都会有一个消息队列,所以系统可以在多个消息队列中转换而不必等待当前程序完成消息处理就可以得到控制权。这种多任务系统就称为抢先式的多任务系统。Windows95/NT就是这种系统。

从虚拟化谈起(一)

虚拟化技术指将一台计算机虚拟为多台虚拟计算机(简称虚拟机),即一台计算机上同时运行多个虚拟机。通过虚拟化层(又称为虚拟机监控器,VMM)的模拟,虚拟机的操作系统仍然认为自己是独占一个系统,因此虚拟机可...
  • wsfdl
  • wsfdl
  • 2014年03月20日 00:39
  • 2379

Windows消息机制详解

文章转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/18/90412.html,感谢原作者。 消息是指什么?      消息系统对于一个wi...
  • mfcing
  • mfcing
  • 2015年03月09日 15:35
  • 3017

Windows消息传递机制详解

Windows是一个消息(Message)驱动系统。Windows的消息提供了应用程序之间、应用程序与Windows系统之间进行通信的手段。应用程序想要实现的功能由消息来触发,并且靠对消息的响应和处理...
  • Evankaka
  • Evankaka
  • 2015年03月19日 13:44
  • 5701

理解windows消息机制-delphi消息机制学习笔记。

一、什么是消息? 消息是windows对应用程序发送的有关‘发生了某种事件’的通知。例如点击鼠标,调整窗口大小或键盘上按下一个键,都会引起windows发送一条消息到应用程序中去,去通知应用程序...
  • chinajobs
  • chinajobs
  • 2016年06月23日 16:39
  • 479

windows消息机制详解

1. 引言 Windows 在操作系统平台占有绝对统治地位,基于Windows 的编程和开发越来越广泛。 Dos 是过程驱动的,而Windows 是事件驱动的[6],这种差别的存在使得很多...
  • u014041012
  • u014041012
  • 2015年04月09日 00:10
  • 1821

浅谈windows下消息机制和linux的异同

浅谈windows下消息机制和linux的异同 
  • smilestone322
  • smilestone322
  • 2011年02月28日 11:28
  • 1290

Windows消息机制VC

 在Windows中,用户或系统中所发生的任何活动被当作事件来处理,例如,用户按下了鼠标按钮,就产生一鼠标事件。对于所发生的每一个事件,Windows将其转换成消息的形式放在一个称为消息队列的内存区中...
  • sunboy_2050
  • sunboy_2050
  • 2011年03月31日 15:10
  • 5713

Windows消息机制以及相关API

消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉。一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用程序某个事情发生了。例如,...
  • swartz_lubel
  • swartz_lubel
  • 2017年03月12日 18:38
  • 535

Window消息机制

1. 引言 Windows 在操作系统平台占有绝对统治地位,基于Windows 的编程和开发越来越广泛。 Dos 是过程驱动的,而Windows 是事件驱动的[6],这种差别的存在使得很多Dos ...
  • songshu5555
  • songshu5555
  • 2016年02月26日 01:28
  • 583

windows的消息机制

windows是基于“事件驱动,消息响应”的一个操作系统,用户使用外部设备对OS产生一个事件(例如:鼠标点击,键盘按键等),OS会把这个事件封装成一个消息(对应一个数据结构),然后由系统调用用户设置的...
  • bobopeng
  • bobopeng
  • 2014年07月13日 03:05
  • 401
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows消息机制初谈
举报原因:
原因补充:

(最多只允许输入30个字)