开发共享MFC动态链接库,我重写了PreTranslateMessage函数,可是死活就是进不到函数体内,而当我开启一个模态对话框即doModal的时候却可以进入到PreTranslateMessage里面,请问大虾们,这问题可能是出在哪里呢? 是我的dialog属性?还是因为共享MFC动态链接库需要有什么地方注意的?还是调用我的动态库的上层程序有地方需要注意?

解决方案 »

  1.   

    PreTranslateMessage是在DoModal中的消息循环中被调用的,你用非模态的形式没有执行该消息循环,自然也执行不到PreTranslateMessage里面。
      

  2.   

    PretranslateMessage依赖于MFC的消息循环。如果容器的消息循环不是MFC的,那么PretranslateMessage不会被调用。所以在标准的mfc dll中这个消息循环是需要自己处理的。如果是mfc扩展的dll就可以继承这个消息。
    建议看一下下面这些文章。DLL/OCX中的MFC对话框不能处理Tab和回车键的问题
    http://dev.csdn.net/develop/article/30/30689.shtmhttp://support.microsoft.com/kb/187988/en-usPRB: Modeless Dialog Box in a DLL Does Not Process TAB Key (233263)
    http://support.microsoft.com/default.aspx?kbid=233263FAQ: WebBrowser Keystroke Problems
    http://www.microsoft.com/mind/0499/faq/faq0499.aspMeandering Through the Maze of MFC Message and Command Routing 
    http://www.microsoft.com/msj/0795/dilascia/dilascia.aspxC++ Q&A: Enabling Menus in MFC Apps, Changing the Behavior of Enter with DLGKEYS Sample App -- MSDN Magazine, July 2000
    http://msdn.microsoft.com/msdnmag/issues/0700/c/default.aspx
      

  3.   

    谢谢Allen_zhang,虽然我还没找到解决方法,不过问题原因你说对了,果然是高手!问题原因找到,我想离解决就不远了,结贴了,多谢