展开全部
前提你要明白一件事,在系统这个层级,消息是绑定给线程的。把消息发送给窗口这个操作是你自己做的,系统并没替你做。
你的线程主循环:
while (GetMessage(...))
{
DispatchMessage(...);
}
是因为你调用了DispatchMessage窗口才会接到消息,只要你在窗口所在线程用DispatchMessage发送消息给窗口之前把消息拦下来就行了。这和父窗口没关系,因为父窗口和子窗口可以不在一个线程。
另外有些不通过SendMessage触发的消息是直接发送给窗口不经过消息队列,如果想拦截这些消息只能重载窗口类乃至下钩子了。
你的线程主循环:
while (GetMessage(...))
{
DispatchMessage(...);
}
是因为你调用了DispatchMessage窗口才会接到消息,只要你在窗口所在线程用DispatchMessage发送消息给窗口之前把消息拦下来就行了。这和父窗口没关系,因为父窗口和子窗口可以不在一个线程。
另外有些不通过SendMessage触发的消息是直接发送给窗口不经过消息队列,如果想拦截这些消息只能重载窗口类乃至下钩子了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询