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

translatemessage_updatewindow_lresult(2)

电脑杂谈  发布时间:2017-05-28 09:00:41  来源:网络整理

BOOLPASCALCWnd::WalkPreTranslateTree(HWNDhWndStop,MSG*pMsg)

{

ASSERT(hWndStop==NULL||::IsWindow(hWndStop));

ASSERT(pMsg!=NULL);

//walkfromthetargetwindowuptothehWndStopwindowchecking

//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-49684-2.html

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

    • 张紫阳
      张紫阳

      请注意是进入人造岛礁

    • 杨损
      杨损

      你把发行股票圈的钱回购回去

    • 叶剑英
      叶剑英

      事物的本质要用心灵才能看见

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