关闭

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

标签: c++null
3142人阅读 评论(0) 收藏 举报
分类:

 

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将等到指定类型的新输入到达后才返回。已存在的未读过的输入(在上次线程检查队列之前接收的)被忽略。

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:998617次
    • 积分:9421
    • 等级:
    • 排名:第1904名
    • 原创:148篇
    • 转载:19篇
    • 译文:8篇
    • 评论:99条
    最新评论