PreTranslateMessage无法捕获小键盘消息问题
时间:2011-12-19
来源:互联网
我用的是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,方向键,却不能捕获小键盘上的消息,有高手指点下原因吗?
建加速键
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,方向键,却不能捕获小键盘上的消息,有高手指点下原因吗?
作者: ltsf1984 发布时间: 2011-12-19
你有没有一个一个的试试。
作者: foxriver_gjg1989 发布时间: 2011-12-19
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;
}
我觉得
这个函数不写,也能触发OnMyEnter OnMyOne
{
if (WM_KEYFIRST <= pMsg-> message &&
pMsg-> message <= WM_KEYLAST)
{
HACCEL hAccel = m_hAccel;
if (hAccel &&
::TranslateAccelerator(m_hWnd, hAccel, pMsg))
return TRUE;
}
我觉得
这个函数不写,也能触发OnMyEnter OnMyOne
作者: tubo_true 发布时间: 2011-12-19
PreTranslateMessage(MSG* pMsg)
这个可捕获所有消息的。。。
这个可捕获所有消息的。。。
作者: shen_wei 发布时间: 2011-12-19
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28