我试图使用以下代码在基于对话框的应用程序中收听简单的键盘事件,但是按下这些键时没有任何事情发生。有人能告诉我出了什么问题吗?
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;
}
答案 0 :(得分:3)
您的PreTranslateMessage
功能是一项独立功能。它不会被自动调用,因为它的名称是PreTranslateMessage
。
该函数必须是对话框类的成员。
BOOL CYourDlg::PreTranslateMessage(MSG* pMsg)
{
...
}
CYourDlg
是您的对话框类。
在对话框类CYourDlg
的声明中的某处放置:
virtual BOOL PreTranslateMessage(MSG* pMsg);