(转)PeekMessage 与 GetMessage 区别
来源:互联网 发布:js 正则替换字符串 编辑:程序博客网 时间:2024/05/22 13:48
转自 Maalvin 的一次论坛回帖
要想知道PeekMessage()和GetMessage()的区别,最简单的办法是在窗口函数拦截WM_PAINT的时候加一个永久循环,像while(TRUE){},循环体中可以输出文本或图形。这时如果你使用GetMessage(),恐怕就会遇到麻烦,你的程序会什么都不做,如果鼠标的光标恰好在窗口,你会发现它不是通常的箭头光标,而是沙漏--这意味着这个永久循环应占用了该程序的所有CPU资源,无法处理其他消息,比如,你无法结束这个程序,也无法最小化。如果这个时候,你用PeekMessage()替换GetMessage(),将处理WM_PAINT的代码写成一个单独的函数,这样,当消息队列中有消息要处理时让程序的TranslateMessage()和DispatchMessage()去处理消息,和GetMessage()一样。当消息队列中没有消息时,调用你的函数,这样就完成了你想在WM_PAINT中想处理而无法处理的事情。而且从这个实验中可以看到GetMessage()和PeekMessage()几个主要区别:
1。GetMessage()只有在接收到消息后才将控制权转给你的程序,而PeekMessage()无论有没有消息都会将控制权转给你的程序:如果有消息,返回真,没有消息返回假。
2。GetMessage()的主要功能是从消息队列中“取出”消息,消息被取出后,消息队列中就不再由该消息了;而PeekMessage()的主要功能是“窥视(peek)”消息,如果有消息,返回真,没有返回假。但PeekMessage()允许你从消息队列中“取出”消息,这就是PeekMessage()第四个函数的用途:如果选用PM_REMOVE,则消息从队列中取出,如选用PM_NOREMOVE,则PeekMessage()则“文如其人”,只是“偷看”,而保留消息。
3。GetMessage()每次都“等待处理消息”而PeekMessage()只是“察看有无消息”。
和PeekMessage()相关的代码:
while (TRUE)
{
if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
break ;
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
else
{
//other program lines to do some work
}
}
- (转)PeekMessage 与 GetMessage 区别
- PeekMessage 与 GetMessage 区别
- GetMessage与Peekmessage区别
- GetMessage与Peekmessage区别
- PeekMessage与GetMessage区别
- PeekMessage()与GetMessage() 区别
- PeekMessage与GetMessage区别
- GetMessage与PeekMessage区别
- GetMessage 与 PeekMessage 区别
- PeekMessage与GetMessage区别
- PeekMessage与GetMessage区别
- PeekMessage() 与 GetMessage() 区别
- GetMessage()与peekMessage()的区别
- PeekMessage及PeekMessage与GetMessage的区别
- GetMessage与PeekMessage的区别
- GetMessage与PeekMessage的区别
- GetMessage与PeekMessage的区别
- GetMessage与PeekMessage的区别
- 安装 libmad 出错
- 将日期转换为yyyy/MM/dd格式
- the clocks(usaco)
- C# WinForm 导出导入Excel/Doc 完整实例教程[使用Aspose.Cells.dll]
- 脚本文件开头处需要说明的内容
- (转)PeekMessage 与 GetMessage 区别
- VB.net下DataGridView的自定义 数据可并、多行标题
- Arithmetic Progressions(usaco)
- Mother's Milk(usaco)
- Dalvik虚拟机
- 什么是信息集成(Information Integration)
- Number Triangles(usaco)
- ACE的日志入门
- Fall Regimen