关于windows消息的派发

本文深入探讨Windows消息处理机制,特别是消息派发与绕过派发直接调用窗口过程的现象。详细列举了无需派发即可直接处理的消息类型及其消息ID。

while(GetMessage(&msg,NULL,0,0))//从消息队列中取消息 
    {
           TranslateMessage (&msg);              //转换消息
           DispatchMessage (&msg);               //派发消息
    }
对于以上结构,写过windows程序的都应该熟悉,其中Dispatch函数负责转发消息,那么如果就dispatch这句话注释掉,是不是windows窗口就收不到消息了,非也,经研究发现,对于一般的鼠标键盘操作,注释掉dispatch是可以屏蔽消息的,但是有些消息是操作系统是直接调用窗口过程的,所以他可以绕过消息循环。

一下是经过测试可以绕过派发消息直接调用窗口过程的消息,但是可能还不止这些吧。

#define WM_ACTIVATE                     0x0006

#define WM_SETFOCUS                     0x0007

#define WM_KILLFOCUS                    0x0008

#define WM_ERASEBKGND                   0x0014

#define WM_ACTIVATEAPP                  0x001C

#define WM_WINDOWPOSCHANGING            0x0046

#define WM_WINDOWPOSCHANGED             0x0047

#define WM_NCHITTEST                    0x0084
#define WM_NCPAINT                      0x0085
#define WM_NCACTIVATE                   0x0086

#if(WINVER >= 0x0400)
#define WM_IME_SETCONTEXT               0x0281
#define WM_IME_NOTIFY                   0x0282

 

原来windows消息分为队列消息,凡是队列消息都需要用消息循环派发,队列消息使用postmessage,而sendmessage是直接发送消息给窗口过程处理的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值