做了个activex控件,WindowProc能获取到消息, 但是PreTranslateMessage得不到消息
如何在WindowProc处的消息传递到PreTranslateMessageLRESULT CWebScanCtrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
// TODO: Add your specialized code here and/or call the base class return COleControl::WindowProc(message, wParam, lParam);
}BOOL CWebScanCtrl::PreTranslateMessage(MSG* pMsg) 
{
// TODO: Add your specialized code here and/or call the base class
ProcessMessage(*pMsg);
return COleControl::PreTranslateMessage(pMsg);
}

解决方案 »

  1.   

    PreTranslateMessage是在WindowProc之前被调用的,前者用于过滤消息,被过滤的消息不进入窗口过程。在窗口过程中调用PreTranslateMessage也是不合适的。
      

  2.   

    up 正解
    只有穿过消息队列的消息才受PreTranslateMessage()影响,采用SendMessage()或其他类似的方式向窗口直接发送的而不经过消息队列的消息根本不会理睬PreTranslateMessage()的存在。
      

  3.   

    PreTranslateMessage是MFC的,需要容器的消息循环调用这个函数才行。
    一般容器不会调用这个函数。
      

  4.   

    多谢上面几个将军们的解答。我利是制作一ActiveX控件,用的是MFC  ActiveX向导。在控件的PreTranslateMessage中COleControl::PreTranslateMessage(pMsg)前加上对TWAIN的消息处理函数,结果是弹出TWAIN扫描界面后,PreTranslateMessage是捕获不到TWAIN的消息。但是在WindowProc那里是能够收到消息的。
      

  5.   

    我解释如下:看了你可能明白为什么了
    MFC中PreTranslateMessage是GetMessage(...)函数的下一级操作,即GetMessage(...)从消息队列中获取消息后,交由PreTranslateMessage()处理,若其返回FALSE则再交给TranslateMessage和DispatchMessage处理(进入WindowProc); 
    如果用SendMessage,  则消息直接交到WindowProc处理,所以GetMessage不会取得SendMessage的消息,当然PreTranslateMessage也就不会被调用。 
    如果用PostMessage,则消息进入消息队列,由GetMessage取得,PreTranslateMessage就有机会进行处理。 
    你在WindowProc接收消息后PostMessage,PreTranslateMessage就有机会进行处理。 你可以试试!
      

  6.   

    能换到WIA的话就换
    TWAIN那个对话框是驱动弹出来的,不同的驱动有不同的界面,消息过程也不一样。
      

  7.   

    我用钩子会说内存不能WRITTEN什么问题呢,还有那个360一直说木马木马