深入GetMessage和PeekMessage[13]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 fireseed 的 blog

4.  一般情况下,所有的键盘消息(如wm_keydownwm_char等等)前往具有输入焦点的窗体。如果这个具有输入焦点的窗体与另一个当前执行的任务相关联,那么该事件会被留在系统队列中,并且那个拥有“有焦点的窗体”的任务会被唤醒(如果休眠了)。“系统队列扫描”代码会像没要发现任何要处理的事件一样,返回到主getmessage/peekmessage代码。请参阅下面的“让步与休眠的不同”和“应用程序如何被唤醒”以获得更多的信息。

5.  如果遇到了没有任何一个窗体具有输入焦点的情形,键盘消息会直接前往当前激活的窗体,而不会被翻译成为系统键消息(如wm_syskeydowwm_syschar,等等)。

6.  与所有指定的消息过滤器进行对照,核查此消息。(请参阅下面的“消息范围过滤和窗体句柄过滤”)如果该消息不匹配过滤器,则重新从头开始“系统队列扫描”代码,查看队列中的下一个消息。

7.  如果事件被返到了当前的任务,它将从系统队列中被删除掉,除非peekmessage被指定为pm_noremove标记。请参阅下面的“peekmessagepm_noremove标记”以了解更多的关于不从队列中删除事件的信息。

8.  如果安装有键盘钩子,将在此刻被调用。如果事件从系统队列中被删除了,钩子的调用将伴随hc_action属性;如果事件未被从系统队列中删除,钩子的调用将具有hc_norem属性。

本文关键:GetMessage; PeekMessage
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top