b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

translatemessage_sendmessage_updatewindow(2)

电脑杂谈  发布时间:2017-05-28 08:24:03  来源:网络整理

//ifanywindowwantstotranslatethismessage

for(HWNDhWnd=pMsg->hwnd;hWnd!=NULL;hWnd=::GetParent(hWnd))

{

CWnd*pWnd=CWnd::FromHandlePermanent(hWnd);

if(pWnd!=NULL)

{

//targetwindowisaCwindow

if(pWnd->PreTranslateMessage(pMsg))

returnTRUE;//trappedbytargetwindow(eg:accelerators)

}

//gottohWndStopwindowwithoutinterest

if(hWnd==hWndStop)

break;

}

returnFALSE;//nospecialprocessing

}

可以看到,代码还是很直接的。从接受到消息的窗口层层往上遍历,并调用PretranslateMessage看是否返回TRUE,是则结束,否则继续。

这里有一个地方非常关键:CWnd*pWnd=CWnd::FromHandlePermanent(hWnd)这一句代码从当前AfxModuleThreadState拿到Permanent句柄表,从而找到hWnd对应的CWnd

MFC 中PreTranslateMessage是GetMessage(...)函数的下一级操作,即GetMessage(...)从消息队列中获取消息 后,交由PreTranslateMessage()处理,若其返回FALSE则再交给TranslateMessage和 DispatchMessage处理(进入WindowProc);

如果用SendMessage,则消息直接交到WindowProc处理,所以GetMessage不会取得SendMessage的消息,当然PreTranslateMessage也就不会被调用。 [Page]

如果用PostMessage,则消息进入消息队列,由GetMessage取得,PreTranslateMessage就有机会进行处理。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49683-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...