调度传入的发送消息,检查发送消息的线程消息队列,并检索消息(如果有的话)。

BOOL WINAPI PeekMessage(_Out_ LPMSG lpMsg,_In_opt_ HWND hWnd,_In_ UINT wMsgFilterMin,_In_ UINT wMsgFilterMax,_In_ UINT wRemoveMsg
);

参数
lpMsg [out]
类型:LPMSG
指向接收消息信息的MSG结构的指针。

hWnd [in,可选]
类型:HWND
要检索其消息的窗口的句柄。该窗口必须属于当前线程。
如果hWnd为NULL,PeekMessage将检索属于当前线程的任何窗口的消息,以及hwnd值为NULL的当前线程的消息队列中的任何消息(请参阅MSG结构)。因此,如果hWnd为NULL,则处理窗口消息和线程消息。
如果hWnd为-1,PeekMessage仅检索当前线程的消息队列中的消息,其中hwnd值为NULL,即PostMessage(hWnd参数为NULL)或PostThreadMessage发布的线程消息 。

wMsgFilterMin [in]
类型:UINT
要检查的消息范围内的第一条消息的值。使用WM_KEYFIRST(0x0100)指定第一个键盘消息或WM_MOUSEFIRST(0x0200)来指定第一个鼠标消息。
如果wMsgFilterMin和wMsgFilterMax都为零,PeekMessage返回所有可用的消息(即不执行范围过滤)。

wMsgFilterMax [in]
类型:UINT
要检查的消息范围内的最后一条消息的值。使用WM_KEYLAST指定最后一个键盘消息或WM_MOUSELAST来指定最后一个鼠标消息。
如果wMsgFilterMin和wMsgFilterMax都为零,PeekMessage返回所有可用的消息(即不执行范围过滤)。

wRemoveMsg [in]
类型:UINT
指定消息的处理方式。此参数可以是以下值中的一个或多个。

含义
PM_NOREMOVE为0x0000

PeekMessage处理后消息不会从队列中删除。

PM_REMOVE0×0001

PeekMessage处理后消息将从队列中删除。

PM_NOYIELD0×0002

防止系统释放等待呼叫者空闲的任何线程(请参阅WaitForInputIdle)。

将此值与PM_NOREMOVEPM_REMOVE组合

默认情况下,处理所有消息类型。要指定只处理某些消息,请指定以下一个或多个值。

含义
PM_QS_INPUT(QS_INPUT << 16)

处理鼠标和键盘消息。

PM_QS_PAINT(QS_PAINT << 16)

处理油漆消息。

PM_QS_POSTMESSAGE((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER)<< 16)

处理所有发布的消息,包括计时器和热键。

PM_QS_SENDMESSAGE(QS_SENDMESSAGE << 16)

处理所有发送的消息。

返回值
类型:BOOL
如果消息可用,则返回值不为零。
如果没有可用的消息,返回值为零。

备注
的PeekMessage检索与由所述标识的窗口相关联的消息的hWnd由指定的参数或任何其子的IsChild功能,并且通过给定的消息的值的范围内wMsgFilterMin和wMsgFilterMax参数。
请注意,应用程序只能使用wMsgFilterMin和wMsgFilterMax参数中的低字; 高字保留给系统。

请注意,PeekMessage始终检索WM_QUIT消息,无论您为wMsgFilterMin和wMsgFilterMax指定了哪些值。

在此呼叫期间,系统提供待处理的非排队消息,即使用SendMessage,SendMessageCallback,SendMessageTimeout或SendNotifyMessage函数发送到调用线程拥有的窗口的消息。

然后检索与指定的过滤器匹配的第一个排队的消息。该系统还可以处理内部事件。如果未指定过滤器,则按以下顺序处理消息:

  • 发送信息
  • 发布消息
  • 输入(硬件)消息和系统内部事件
  • 发消息(再次)
  • WM_PAINT消息
  • WM_TIMER消息
要在发布消息之前检索输入消息,请使用wMsgFilterMin和wMsgFilterMax参数。
所述的PeekMessage功能通常不会删除WM_PAINT从队列中的消息。WM_PAINT消息保留在队列中,直到它们被处理。但是,如果WM_PAINT消息具有NULL更新区域,PeekMessage将其从队列中删除。
如果顶级窗口停止响应消息超过几秒钟,系统会将该窗口视为不响应,并使用具有相同z阶,位置,大小和视觉属性的ghost窗口替换该窗口。这允许用户移动它,调整大小,甚至关闭应用程序。
但是,这些是唯一可用的操作,因为应用程序实际上没有响应。当一个应用程序被调试时,系统不会生成一个鬼窗口。

PeekMessage相关推荐

  1. GetMessage和PeekMessage的区别

    在Win32中使用GetMessage和PeekMessage都可以获取对应该程序产生的消息. 他们有什么区别呢? GetMessage的一般用法是GetMessage(&msg,NULL,0 ...

  2. win32——消息循环 原理 函数 GetMessage PeekMessage TranslateMessage SendMessage PostMessage...

    //消息循环 MSG 结构体 typedef struct tagMSG {HWND hwnd;UINT message; //消息ID WPARAM wParam;LPARAM lParam;DWO ...

  3. PeekMessage抓取消息,如何把每个消息都获取到呢?

    有一个看似简单的问题: 1 while(1)2 {3 while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))4 {5 if (WM_QUIT ==m ...

  4. 深入GetMessage,PeekMessage以及Windows消息机制

    译者的话该文重点讲述了Windows处理事件.消息的具体过程和步骤.尤其是在系系处理鼠标键盘事件的过程上做了详解.通过这篇文章,你将对Windows的消息处理机制有一个较全面的了解. 概念这篇文章解释 ...

  5. PostMessage,SendMessage,GetMessage,PeekMessage,TranslateMessage,DispatchMessage的用法集合

    SendMessage函数功能描述:将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口过程,直到窗口过程处理完消息后才返回. Postmessage函数则是将消息放入消息队列里,并立即返回. ...

  6. sanf()、kbhit()、getch()获取键盘信息与peekMessage()获取鼠标信息

    C++语言获取键盘消息的几种方法 scanf()用户输入键盘信息 kbhit()与getch(),kbhit检测键盘是否按下,getch()获取键盘输入的信息 peekMessage()函数检测是否有 ...

  7. PeekMessage与GetMessage区别

    原文地址:http://www.cnblogs.com/faceang/archive/2010/05/25/1743757.html PeekMessage与GetMessage的对比 相同点:   ...

  8. GetMessage和PeekMessage的区别及PostMessage(hWnd, WM_QUIT, 0, 0)消息

    关于这个两个函数的详细信息: BOOL GetMessage(   LPMSG lpMsg,              // 一个MSG的指针   HWND hWnd,               / ...

  9. GetMessage PeekMessage SendMessage PostMessage

    GetMessage () and PeekMessage () GetMessage 其唯一用途就是从事件对列中获得消息,并进行处理.当程序在等待通过 GetMessage 传递的消息时,主事件循坏 ...

最新文章

  1. 【刷题】BZOJ 4516 [Sdoi2016]生成魔咒
  2. Asp.net SignalR 应用并实现群聊功能 开源代码
  3. 四面体的表面积_JACS:武汉大学汪成课题组利用从平面至四面体的扭曲单体来合成COFs材料...
  4. 7个相同小球4个不同盒子_如何用天平称三次找出12个外观相同小球中仅有的一个次品?次品质量与正品不同。...
  5. 如何去使用Python爬虫来爬取B站的弹幕数据?
  6. Centos Another app is currently holding the yum lock
  7. jquery --- 阻止表单默认的提交行为,标准化表单的数据
  8. Centos7 -bash: ifconfig : command not found
  9. 鼠标悬停在li标签上时显示一个弹框_HTML标签——列表标签
  10. Spring Boot 集成 GRPC
  11. Jmeter命令行执行并生成HTML报告
  12. Oracle行转列、列转行的Sql语句总结
  13. 开关造成的毛刺_解决交易中的毛刺问题,你可以这样做
  14. Oracle EBS R12 电子技术参考手册 - eTRM (电子文档)
  15. 编程与python的区别_python与其他编程语言区别全在这
  16. 安装使用反编译工具ILSPY
  17. 简述 Java 垃圾回收机制
  18. 模板的选择和结合部位可塑性处理对GPCRs虚拟筛选性能影响
  19. acwing——数学知识(四)Nim游戏
  20. openstack rdo_为什么我们在RDO中对OpenStack软件包构建使用测试

热门文章

  1. java mqtt协议_基于 tio 实现 mqtt5 协议之 micamqtt
  2. 没有Science也没有娃,上海交大博士谈科研经历爆笑全场
  3. 师弟新作!Nature子刊 | 重大进展!何川团队首次系统地获得了19个组织的5hmC图谱
  4. 2.3基本算法之递归变递推_3525上台阶 python
  5. linux两台服务器传输,Linux两台服务器之间高速数据传输命令:scp应用详解
  6. js hover 触发事件_为什么说JS的DOM操作很耗性能
  7. linux 下的csp 模块,linux kernel 中MIGRATE_TYPES的理解
  8. 信息安全工程师笔记-案例分析(三)
  9. Android笔记-ERROR: Invalid revision: 3.17.20200511-g8787079
  10. C++笔记-DLL的编写与调用