如何在MFC中处理按键事件?

5
我想截取在我的对话框显示时按下的键。

语言、平台等。MVC是通用的,可用于Web、Windows、移动设备。我可以轻松地为您提供ASP.NET MVC的答案,但不知道这是否是您想要的。 - Craig
@Craig:MFC是指Microsoft Foundation Classes。C++。 - Casebash
抱歉,工作太多了! - Craig
2个回答

4

要么设置一些加速器来发送相关的WM_COMMAND,要么响应WM_KEYDOWN / UP消息并注意您的按键。

更多信息请参见:

http://www.codeproject.com/KB/dialog/pretransdialog01.aspx

并从该文章中获取有用的代码:

BOOL CPreTransTestDlg::PreTranslateMessage(MSG* pMsg) 
{
    if(pMsg->message==WM_KEYDOWN)
    {
        if(pMsg->wParam==VK_RETURN)
            pMsg->wParam=VK_TAB;
    }   
    return CDialog::PreTranslateMessage(pMsg);
}

要使其适应其他键,请查看WINUSER.H - Casebash

1

你应该研究一下钩取键盘事件。那是一个CodeGuru的链接,但是当你谷歌搜索如何使用MFC钩取键盘事件时,会有很多很多的资源可用。

在这些文章中,你会发现键盘和/或事件挂钩是首选的术语。"拦截"很少用于描述这个过程。还有一个注意事项:要小心挂钩的位置!你可以挂钩到你的对话框或其他几个级别。(顺便说一句,键盘记录器是使用这种策略的众所周知的特洛伊木马。只是提供信息而已。)

谢谢。我可能没有表达清楚,但我正在尝试拦截我创建的对话框中的键,而不是另一个程序的对话框。我希望能够轻松激活调试功能。 - Casebash
键盘钩子无论目标窗口是否由您创建都可以工作。该过程通常用于钩取其他窗口,但也可用于钩取您自己的窗口。 - Paul Sasik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接