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

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;

}

最佳答案

您的 PreTranslateMessage 函数是一个独立的函数。它不会仅仅因为它的名字是 PreTranslateMessage 就被自动调用。

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

BOOL CYourDlg::PreTranslateMessage(MSG* pMsg)
{
...
}
CYourDlg 是你的对话类。

在对话框类 CYourDlg 的声明中的某处放置:
virtual BOOL PreTranslateMessage(MSG* pMsg);

关于c++ - 在 PreTranslateMessage() 中监听 MFC 中的键盘事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35363045/

10-11 16:32