简单的说:
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); //查找并调用消息处理函数;
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); //查找并调用消息处理函数;
解决方案 »
- win32 sdk 自绘按钮怎么透明到底图
- 为什么我写的SetTimer函数回调到Cancel函数里
- 系统做好后,怎样把系统包含的MFC动态库找出来一起打包给用户!
- 调用通用对话框时编译错误,帮忙解决一下!
- bohut请各位网友给我儿子(女儿)取个名字!呵呵
- 如何取得MultiSelect ListBox里同时多选的选项内容?
- 请问怎样设置CInternetSession::GetFtpConnection()的连接超时
- 小事求助
- 我没有可用分了!可是答复别人的贴子,和自己发新贴子都没见长,怎么回事?
- 如何使用MAKEFILE生成进程内服务器与进程外服务器
- ODBC 驱动程序的问题
- 如何让程序自启动
2.TranslateMessage是用来字符消息的,如将WM_KEYDOWN、WM_KEYUP消息转换成WM_CHAR消息。
机会让给别人。通过程序之间彼此协调让步的方式,达到多任务能力。而win9x and winNT具备强制性多任务能力,不再非靠GetMessage释放CPU控制权不可。
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组的帮助把消息传到窗口处理函数去了。