在'PreTranslateMessage'函数中处理WM_KEYDOWN时无法进入OnChar()

时间:2012-07-31 05:46:45

标签: visual-c++

出于某种原因,当我在WM_KEYDOWN message中获得PreTranslateMessage时,我需要做一些事情,所以我做了类似的事情:

if(WM_KEYDOWN == pMsg->message && pMsg->hwnd == GetSafeHwnd())
{      
     SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
     return TRUE;       
}

这样做之后,我发现没有办法进入OnChar功能,这很糟糕。 谁知道为什么以及如何解决这个问题?非常感谢帮助。

3 个答案:

答案 0 :(得分:1)

从PreTranslateMessage()返回TRUE时,将不再进一步处理该消息。您为每个键击执行此操作,因此不会处理任何键盘并且永远不会生成WM_CHAR消息。换句话说,你得到了你所要求的。它看起来像是在向自己发送消息。很难提出替代方案,代码没有意义。

答案 1 :(得分:0)

为什么要向自己发送相同的信息?如果您只想进行一些处理并让消息通过“if”语句中您需要执行的操作,则执行您的处理并让正常的消息链接起作用。这样,消息将被分派以进行进一步处理并最终到达您的onChar。

所以你的代码应该是这样的:

void YourWnd::PreTranslateMessage(MSG *pMsg)
{
    if(WM_KEYDOWN == pMsg->message && pMsg->hwnd == GetSafeHwnd())
    {      
         processKeyDown();      
    }
    return CWnd::PreTranslateMessage(pMsg);
}

答案 2 :(得分:0)

为什么选择PreTranslateMessage?你有什么理由在PreTranslateMessage中做到这一点?

PreTranslateMessage顾名思义预先包含热门/快捷键的消息。 使用它作为某种绷带很快就会导致灾难。

您能告诉我们您想要实现的目标吗?有人能够提出更好的解决方案。