message

jco 2000-09-14 12:35:00
哪位打下指点一二
peekmessage和getmessage的区别。
TranslateMessage和DispatchMessage的功用。
小弟再次谢了!!!
...全文
115 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ppc207 2000-09-22
  • 打赏
  • 举报
回复
哈,这回你可问对人了:
peekmessage主要的作用是可以处理程序的闲置时间onidle(就是系统没有任何信息等待处理的时间)举个例子:
while(TRUE)
{
if( peekmessage($msg,null,0,0,PM_REMOVE))
{translatemessage($msg);
dispatchmessage($msg);
}
else
{
onidle();
}
};
peekmessage和getmessage都是到系统中去抓信息,当抓不到操作系统会把他虚悬,然后去执行其他程序。如果操作系统再次回头时发现消息队列中仍是空的,这时api函数就不同了:
getmessage:会过门不入,于是操作系统回去照顾其他人;
peekmessage:会取回控制权,使程序得以执行一段时间,于是上述程序进入onidle函数;
这就是他们的区别;
对于translatemessage是将键盘信息转化,产生虚拟键消息,就是wm_消息,但不产生ASKII码。
而dispatchmessage是投递消息,他通过user组的帮助把消息传到窗口处理函数去了。


坎坷的菜贩 2000-09-14
  • 打赏
  • 举报
回复
1.如Holly所说,二者区别即是否立即返回,所以通常在需要响应Idle消息时使用PeekMessage。
2.TranslateMessage是用来字符消息的,如将WM_KEYDOWN、WM_KEYUP消息转换成WM_CHAR消息。
Holly 2000-09-14
  • 打赏
  • 举报
回复
简单的说:
1.
PeekMessage是到消息队列中查找符合条件的消息,由调用者决定是否将找到的消息取出来,而且该函数不管消息队列中是否有消息,都返回!
GetMessage是到消息队列中直接取符合条件的消息,如果没有就等待不返回!
如果要详细的知道,到MSDN\Technical Articles\Windows Platform\Windows Management\中查看《GetMessage and PeekMessage Internals》文章;

2.
通常TranslateMessage和DispatchMessage需要一起来用!
TranslateMessage(&msg); //当msg是VIRTUAL KEY消息时转换成字符ASCII消息;
DispatchMessage(&msg); //查找并调用消息处理函数;
younet 2000-09-14
  • 打赏
  • 举报
回复
GetMessage是win3.x非强制性多任务的关键,也就是说,如果信息队列上没有我的信息,我就把
机会让给别人。通过程序之间彼此协调让步的方式,达到多任务能力。而win9x and winNT具备强制性多任务能力,不再非靠GetMessage释放CPU控制权不可。

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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