c++中消息函数(3)----PeekMessage和WaitMessage函数

原创 2012年03月25日 10:56:12

 

l      PeekMessage

此函数检查一个线程消息队列中消息,如果消息存在,放置消息到指定的MSG结构体中。

BOOL PeekMessage(

  LPMSGlpMsg,

  HWND hWnd,

  UINT wMsgFilterMin,

  UINT wMsgFilterMax,

  UINT wRemoveMsg

);

lpMsg    

指向从线程的消息队列接收消息的MSG结构体。

hWnd

       需要检索消息的窗体句柄。

wMsgFilterMin

       指定被检索的最小消息值的整数。

wMsgFilterMax

       指定被检索的最大消息值的整数。

wRemoveMsg

指定消息如何处理。参数如下:

解释

PM_NOREMOVE

PeekMessage处理之后消息不需要从消息队列中移除

PM_REMOVE

PeekMessage处理之后消息需要从消息队列中移除。一个特别即是WM_PAINT消息,它不能从消息队列中移除。

 

返回值

如果有一个消息适合,函数返回非0.

如果没有消息适合,函数返回0.

说明

GetMessage不同的是,PeekMessage函数不会等到有消息放入队列时才返回。

PeekMessage函数检索由hWnd参数标识的和窗体关联的,或者由IsChild函数指定的它们的子窗体,并且在wMsgFilterMin和wMsgFilterMax参数指定的消息范围之间消息。如果hWndNULL,则PeekMessage获取属于调用该函数应用程序的任一窗口的消息(PeekMessage不会获取属于其他线程的窗口消息),如果hWnd=-1,那么函数只返回把hWnd参数为NULLPostTreadMessage函数送去的消息。如果wMsgFilterMinwMsgFilterMax都是0,则PeekMessage就返回所有可得到的消息。

WM_KEYFIRSTWM_KEYLAST常量作为过滤器去获取所有键盘消息;用WM_MOUSEFIRSTWM_MOUSELAST常量作为过滤器区域获取所有的鼠标消息。

函数获取之后将删除消息队列中的除WM_PAINT消息之外的其他消息,至于WM_PAINT则只有在其处理之后才被删除。 

在创建应用程序最高级别的窗口之前调用PeekMessage会导致创建的窗口在z序列后面,因此需要显示的调用SetForegroundWindow函数显示此窗口。如果应用程序已经有一个窗口在前景,新创建的窗口仍会在前景创建。

l      WaitMessage

当一个线程没有消息在其消息队列中的时候,线程放弃控制权给其他的线程。WaitMessage函数挂起线程,直到一个新的消息被放入线程的消息队列中才返回。

 

BOOL WaitMessage(VOID);

 

参数

       无

返回值

       如果函数执行成功,返回非0.

       如果函数执行失败,返回值为0,调用GetLastError函数获得详细错误信息。

说明

       线程在调用一个函数核查线程消息队列后,如果消息队列中没有可读的消息,WaitMessage函数不会返回。这是因为PeekMessageGetMessageGetQueueStatus、WaitMessageMsgWaitForMultipleObjectsMsgWaitForMultipleObjectsEx这样的函数核对消息队列,改变队列的状态信息这样输入不再被认为是新的。如果连续调用WaitMessage将等到指定类型的新输入到达后才返回。已存在的未读过的输入(在上次线程检查队列之前接收的)被忽略。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++ PeekMessage与GetMessage的对比

相同点: PeekMessage函数与GetMessage函数都用于查看应用程序消息队列,有消息时将队列中 的消息派发出去。 不同点: 无论应用程序消息队列是否有消息,PeekMess...

C++ MessageBox MessageBoxA MessageBoxW AfxMessageBox

转自:http://blog.sina.com.cn/s/blog_5059be880100whu3.html C语言的MessageBox MessageBoxA(     HWND hWnd...

MessagePack for C/C++的使用

MessagePack is an efficient binary serialization format. It lets you exchange data among multiple la...

C++中添加自定义消息的响应 (BEGIN_MESSAGE_MAP ON_MESSAGE)

1首先要在窗口类的cpp文件手动添加消息响应机制,ON_MESSAGE(ID,Handler)  LRESULT   Handler(WPARAM,LPARAM);//响应的函数BEGIN_MESSA...

深入浅出MFC学习笔记1_GetMessage、PeekMessage、TranslateMessage、DispachMessage等等用法 消息循环中的TranslateMessage函数和Dis

GetMessage: BOOL GetMessage(           LPMSG lpMsg,     HWND hWnd,     UINT wMsgFilterMi...

PeekMessage和GetMessage函数的主要区别

经网络资料查找以及MSDN资源查找,整合出PeekMessage函数和GetMessage函数的主要区别,内容比较全,也有应用代码说明。联系:在Windows的内部,GetMessage和PeekMe...

GetMessage()函数与PeekMessage()函数的区别

所有Windows程序都是由消息驱动的,Windows有时也被称为“基于事件的、消息驱动的”操作系统。在Windows程序的执行过程中,只要用户进行了影响窗口的操作,都会触发相应的事件。操作系统每次检...

C++中建立对象间消息连接的一种系统方法——回调函数

用过C++进行过面向对象程序设计的用户都知道,程序中的对象很少单独存在。不考虑对象间的相互作用几乎是不可能的。所以,标识对象间的关系或建立对象间的消息连接是面向对象程序设计的一项重要任务。本文着重从C...

C++ 消息(成员函数调用)的动态绑定

1. 消息的多态性     C++把类看作类型,把以public方式(严格讲:只有public方式)继承的派生类看做基类的子类型,这样就使得在C++面向对象程序中存在下面的三种多态:     1)对象...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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