MFC中PretranslateMessage的实现[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 atfield 的 blog

mfc里面,pretranslatemessage是一个很重要的虚函数。这个函数的作用这里就不谈了,很多地方都有涉及,这里只谈一下其实现的机制。
谈到pretranslatemessage的实现,便不得不谈到mfc消息循环的实现。mfc通过cwinapp类中的pumpmessage函数实现消息循环,但是实际的消息循环代码位于cwinthread中,cwinapp只是从cwinthread继承过来。其简化后的代码大概如下:
bool cwinthread::pumpmessage()
{
    _afx_thread_state *pstate = afxgetthreadstate();

    ::getmessage(&(pstate->m_msgcur), null, null, null))
 
    if (!afxpretranslatemessage(&(pstate->m_msgcur)))
    {
        ::translatemessage(&(pstate->m_msgcur));
        ::dispatchmessage(&(pstate->m_msgcur));
    }
    return true;
}

本文关键:MFC中PretranslateMessage的实现
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top