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

kir*_*kir 1 c++ winapi wndproc event-handling

我就是按标题问的。是否可以?

由于 aMSG已经包含了我自制事件处理程序所需的所有内容,因此我想也许我可以制作一个。我要求这主要是为了摆脱解释型转换,这样我就可以在窗口类中使用内部函数和类来提高性能。我还想知道是否有可能只得到味精并用它做我想做的事。

基本上还有另一种方法来获取窗口消息,然后处理它,与此线程中发现的一般循环不相似?

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

提前谢谢您。

Han*_*ant 5

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

这就是问题所在,GetMessage() 只检索发布到消息队列的消息。它不检测使用 SendMessage() 发送的消息。它绕过消息队列,直接调用窗口过程。

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

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

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