0

WM_KEYDOWN message出于某种原因,当我进入时我需要做一些事情PreTranslateMessage,所以我做了这样的事情:

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

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

4

3 回答 3

1

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

于 2012-07-31T08:26:04.490 回答
0

为什么你会向自己发送同样的信息?如果您要做的只是进行一些处理并让消息通过您在“if”语句中需要做的所有事情就是进行处理并让正常的消息链接工作。这样,消息将被发送以进行进一步处理并最终到达您的 onChar。

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

void YourWnd::PreTranslateMessage(MSG *pMsg)
{
    if(WM_KEYDOWN == pMsg->message && pMsg->hwnd == GetSafeHwnd())
    {      
         processKeyDown();      
    }
    return CWnd::PreTranslateMessage(pMsg);
}
于 2012-08-01T10:42:51.847 回答
0

为什么选择 PreTranslateMessage?您必须在 PreTranslateMessage 中执行此操作的可能原因是什么?

PreTranslateMessage 顾名思义就是包含热键/快捷键的预翻译消息。使用它作为某种绷带经常会迟早导致灾难。

你能告诉我们你想要达到什么目标吗?有人将能够提出更好的解决方案。

于 2012-08-01T12:46:23.137 回答