用另一个函数替换WndProc来处理消息?

时间:2014-01-07 12:56:23

标签: c++ winapi event-handling wndproc

我问的标题是什么。有可能吗?

由于MSG已经包含了自制事件处理程序所需的所有内容,我想也许我可以制作一个。我主要想要解决这个问题,因此我可以在窗口类中使用内部函数和类来提高性能。我也想知道是否可以单独使用MSG并随心所欲地做任何事情。

基本上有另一种获取窗口消息的方法,然后处理它与此thread中的常规循环不相似吗?

编辑: 目前我正在使用GetMessage()函数来获取MSG结构并在我自己的事件处理程序中使用它,但是我没有得到我想要的所有消息。还有什么我应该做的吗?

先谢谢你。

1 个答案:

答案 0 :(得分:4)

  

目前我正在使用GetMessage()函数来获取MSG结构

问题是什么,GetMessage()只检索发布到消息队列的消息。它检测与SendMessage()一起发送的消息。绕过消息队列并直接调用窗口过程。

因此必须使用WndProc查看所有窗口的消息。

进入队列并由GetMessage()返回的已发布消息的子集很小。简而言之,鼠标和键盘的输入通知消息以及低优先级消息(WM_PAINT,WM_TIMER,WM_QUIT)。始终发送WM_ACTIVATE。

替换窗口的WndProc当然是一种常见的技术,它被称为“sub-classing the window"。任何C ++类库包装器都使用它来将消息映射到C ++方法。最好不要重新发明那个轮子。” p>