首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

PreTranslateMessage无法捕获小键盘消息有关问题

2012-02-27 
PreTranslateMessage无法捕获小键盘消息问题我用的是PreTranslateMessage捕获加速键来捕获指定的键盘消息

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”键有关。

热点排行