PreTranslateMessage无法捕获小键盘消息问题
我用的是PreTranslateMessage捕获加速键来捕获指定的键盘消息的,方法如下
建加速键
IDD_MYDIALOG ACCELERATORS DISCARDABLE
BEGIN
VK_RETURN, ID_MY_ENTER, VIRTKEY, NOINVERT
VK_NUMPAD1, ID_MY_ONE, VIRTKEY, NOINVERT
END
在CMyDialog.h里添加快捷键变量,和响就函数
HACCEL m_hAccel;
BOOL PreTranslateMessage(MSG* pMsg);
void OnMyEnter();
void OnMyOne();
在在CMyDialog.cpp里添加响应函数定义, 加速键和响应函数关联,加载加速键
BEGIN_MESSAGE_MAP(CBoatList, CDialog)
ON_COMMAND(ID_MY_ENTER,OnMyEnter)
ON_COMMAND(ID_MY_ONE,OnMyOne)
END_MESSAGE_MAP()
BOOL CBoatList::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
m_hAccel = ::LoadAccelerators(AfxGetResourceHandle(),MAKEINTRESOURCE(IDD_MYDIALOG));
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
BOOL CDialog::PreTranslateMessage(MSG* pMsg)
{
if (WM_KEYFIRST <= pMsg-> message &&
pMsg-> message <= WM_KEYLAST)
{
HACCEL hAccel = m_hAccel;
if (hAccel &&
::TranslateAccelerator(m_hWnd, hAccel, pMsg))
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
void CMyDialog::OnMyEnter()
{
AfxMessageBox(_T("enter"));
}
void CMyDialog::OnMyOne()
{
AfxMessageBox(_T("1"));
}
可是上面这个方法,可以捕获enter,方向键,却不能捕获小键盘上的消息,有高手指点下原因吗?
[解决办法]
和“NumLock”键有关。