出于某种原因,当我在WM_KEYDOWN message
中获得PreTranslateMessage
时,我需要做一些事情,所以我做了类似的事情:
if(WM_KEYDOWN == pMsg->message && pMsg->hwnd == GetSafeHwnd())
{
SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
return TRUE;
}
这样做之后,我发现没有办法进入OnChar
功能,这很糟糕。
谁知道为什么以及如何解决这个问题?非常感谢帮助。
答案 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顾名思义预先包含热门/快捷键的消息。 使用它作为某种绷带很快就会导致灾难。
您能告诉我们您想要实现的目标吗?有人能够提出更好的解决方案。