哪里分组捕获线程消息WINAPI / MFC

时间:2010-11-17 14:04:13

标签: winapi mfc

有谁知道将线程消息转发给子控件的最佳位置在哪里?

基本上,app必须捕获msg_frst ... msg_last范围内的已注册线程消息,并将它们转发到活动帧/视图。

MFC中有3个超载点,或者看起来如此: DefWndProc OnWndMessage 的PreTranslateMessage

要覆盖哪一个是正确的?

1 个答案:

答案 0 :(得分:1)

使用PostThreadMessage()发布的消息具有NULL窗口句柄。所以忘记任何窗口方法,DispatchMessage()不会提供它们。你得到的只是CWinThread :: PreTranslateMessage()。

但是这里有一个很大的危险,当该线程中的任何代码开始抽取自己的消息循环时,不会再调用它。您的消息现在属于位桶,因为其他代码现在正在调用Peek / GetMessage()。那么你认为这更有可能,MessageBox()就足够了。或COM模态循环。等等。

您只能安全地使用PostThreadMessage()将消息发送到创建自己的任何窗口的线程。解决方法很简单,为线程提供一个窗口句柄,以便它可以调用PostMessage()。这可能是一个隐藏的窗口,专门用于处理这些消息。