windows消息机制

chenqing1985 2009-03-23 08:42:06
windows的消息机制有什么优点呢?
越详细越好,谢谢了!!!
...全文
247 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingyin55 2009-03-23
  • 打赏
  • 举报
回复
ltc_mouse 2009-03-23
  • 打赏
  • 举报
回复
在不使用消息的情况下,要作到对事件(简单的如键盘,鼠标)的响应,在底层可以中断,中断回调
怎么通知上层那么多的应用程序呢?回调应该也能做到,但必然相当麻烦了~ 而且,用回调,难免产生很多的回调函数,函数层次也不直观了
消息让这些处理感觉起来简单多了~
ForestDB 2009-03-23
  • 打赏
  • 举报
回复
没有什么优点,而是这种图形化界面跑起来的必然。
elmnd 2009-03-23
  • 打赏
  • 举报
回复
消息循环, 事件驱动(一个一个的CASE填写进去。。。)
chenqing1985 2009-03-23
  • 打赏
  • 举报
回复
没人回答了啊。
我只知道使用消息机制的一个优点是:
当外界获别的线程向主线程发送数据,把该消息发送给主线程窗口,这样主线程可以在平时的时候做别的事,当有数据来的时候就完成另一功能,提高效率。
还有什么别的优点吗?
chenqing1985 2009-03-23
  • 打赏
  • 举报
回复
例如一个程序,想完成一些操作,直接运行这些函数,和先postMessage然后再调用该函数这样做有什么优点呢?
Dinelgua 2009-03-23
  • 打赏
  • 举报
回复
<windows核心编程>
fairchild811 2009-03-23
  • 打赏
  • 举报
回复
交互式
RocWay007 2009-03-23
  • 打赏
  • 举报
回复
我觉得消息机制最大的好处就是使得程序可以对用户的操作进行反应。
相比早期的DOS程序,Windows的这种消息机制使得程序与用户之间的交流方便多了。
chenqing1985 2009-03-23
  • 打赏
  • 举报
回复
我知道什么是消息循环机制,就是不是很清楚这样的消息机制最重要的优点是什么
wanghao111 2009-03-23
  • 打赏
  • 举报
回复
推荐去看《深入浅出MFC》 侯捷著 相当不错的一本书 介绍的很详细
liujianwish 2009-03-23
  • 打赏
  • 举报
回复
mark
insulted 2009-03-23
  • 打赏
  • 举报
回复
侯俊杰的《深入浅出MFC》前三章。
wuyanchao 2009-03-23
  • 打赏
  • 举报
回复
这个消息机制,我的理解,就是windows操作系统帮你非配的时间,每1/10的时间他就循环处理或者叫监听一个进程,这样就循环了,有什么消息 我就处理什么消息,比如键盘按了一下,他接受到了 就处理。
hjjdebug 2009-03-23
  • 打赏
  • 举报
回复
消息是用来向窗口发送的信息。 发送消息,实际上就等于调用了窗口过程函数。
窗口过程函数是一个包含处理所有消息的大的函数。
不同的消息,往往会覆盖这个大的处理函数的不同的部分。
窗口工程函数是暴露给系统的。

采用消息的好处是让系统多承担一些工作,因为有很多工作是重复的。这些繁重
的工作应该由系统去做,因为系统做只是苦了系统一个,给应用做就是苦了一大片。
而让应用只做它必须做的工作。
  • 打赏
  • 举报
回复
http://blog.csdn.net/ccy3253/archive/2007/12/03/1913775.aspx
http://www.qudong.com/soft/program/C/rumenjiaocheng/20080317/1362.html
不乱贴,占版面了。
hengcai001 2009-03-23
  • 打赏
  • 举报
回复
研究下MFC的源代码吧
wuyu637 2009-03-23
  • 打赏
  • 举报
回复
http://linux.chinaunix.net/techdoc/install/2008/12/17/1053555.shtml
wuyu637 2009-03-23
  • 打赏
  • 举报
回复
zz

1.2 理解Windows消息机制
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就是这种系统。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧