在PreTranslateMessage()中侦听MFC中的键盘事件

时间:2016-02-12 12:46:56

标签: c++ visual-studio visual-c++ mfc

我试图使用以下代码在基于对话框的应用程序中收听简单的键盘事件,但是按下这些键时没有任何事情发生。有人能告诉我出了什么问题吗?

BOOL PreTranslateMessage(MSG *pMsg)
{

CListeningApp* App = (CListeningApp*) AfxGetApp();
int x=(int)pMsg->wParam;

if(pMsg->message==WM_KEYDOWN)
{
    if(x==VK_UP)
    MessageBox(NULL,L"UP",L"UP", MB_OK);

    if(x==VK_DOWN)
    MessageBox(NULL,L"DOWN",L"DOWN", MB_OK);

    if(x==VK_RIGHT)
    MessageBox(NULL,L"RIGHT",L"RIGHT", MB_OK);

    if(x==VK_LEFT)
    MessageBox(NULL,L"LEFT",L"LEFT", MB_OK);

    if(x==65)
        MessageBox(NULL,L"Keyboard Event",L"You Pressed the letter a", MB_OK);


}
return TRUE;

}

1 个答案:

答案 0 :(得分:3)

您的PreTranslateMessage功能是一项独立功能。它不会被自动调用,因为它的名称是PreTranslateMessage

该函数必须是对话框类的成员。

BOOL CYourDlg::PreTranslateMessage(MSG* pMsg)
{
...
}

CYourDlg您的对话框类。

在对话框类CYourDlg的声明中的某处放置:

virtual BOOL PreTranslateMessage(MSG* pMsg);