2015-03-27
展开全部
在基于对话框的程序中,焦点往往在程序的一个子控件(control)里而不是主对话框。所以,对话框的成员函数才没有办法调用到OnKeyDown函数。也许认为是像对话框这样的简单程序,不应该响应很复杂的消息吧。为了能够响应键盘按键,需要重写PreTranslateMessage函数,在这个函数里对按键进行响应。 在分配(dispatch)消息给TranslateMessage和DispatchMessage之前,翻译(translate)消息。如果被翻译,并且不应被分配,那么返回非0值;
若没有被翻译,应该被分配,那么返回值为0.以下代码只是在按键之后,弹出一个对话框,具体还可以根据具体按键来响应
BOOL CMyMFCDlg::PreTranslateMessage(MSG* pMSG)
{
if (pMSG ->message == WM_KEYDOWN) // If a keydown message
{
if (pMSG ->wParam == _T('A')) // If 'A' pressed
MessageBox((LPCTSTR)L"A pressed", (LPCTSTR)L"In PreTranslate", MB_OK);
MessageBox((LPCTSTR)L"Key Down In PreTanslate", (LPCTSTR)L"Message", MB_OK);
}
return CDialogEx::PreTranslateMessage(pMSG);
}
若没有被翻译,应该被分配,那么返回值为0.以下代码只是在按键之后,弹出一个对话框,具体还可以根据具体按键来响应
BOOL CMyMFCDlg::PreTranslateMessage(MSG* pMSG)
{
if (pMSG ->message == WM_KEYDOWN) // If a keydown message
{
if (pMSG ->wParam == _T('A')) // If 'A' pressed
MessageBox((LPCTSTR)L"A pressed", (LPCTSTR)L"In PreTranslate", MB_OK);
MessageBox((LPCTSTR)L"Key Down In PreTanslate", (LPCTSTR)L"Message", MB_OK);
}
return CDialogEx::PreTranslateMessage(pMSG);
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询