BOOL CSerialPortTestDlg::PreTranslateMessage(MSG*
pMsg)
{
// TODO: Add your specialized code here and/or call the base
class
// if(pMsg->message==WM_KEYDOWN
&&
pMsg->wParam==VK_RETURN)
// MessageBox("你按下了键盘上的回车键!");
if (pMsg->message==WM_KEYDOWN)
{
switch (pMsg->wParam)
{
case VK_LEFT:
AfxMessageBox("左键");
break;
case VK_RIGHT:
AfxMessageBox("右键");
break;
case VK_UP:
AfxMessageBox("上");
break;
case VK_DOWN:
AfxMessageBox("下");
break;
case VK_SPACE:
AfxMessageBox("空格");
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
首先,简介一下键盘消息:
(1)系统消息:(系统键Alt,F10等),由系统内部处理
WM_SYSKEYDOWN
WM_SYSKEYUP
WM_SYSCHAR
(2)非系统消息:
WM_KEYDOWN
WM_KEYUP
WM_CHAR
二、添加消息(一般WM_KEYDOWN),在消息响应函数
OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
有三个变量,nChar这是虚拟键代码,另外两个不常用,用时参看MSDN。
如果要响应组合键,可以用GetAsyncKeyState()检测按键状态
如:
case
VK_UP:
if
(GetAsyncKeyState(VK_LSHIFT))
{
// 左shift+up
}
break;
三,下面介绍虚拟键代码:
0~9,A~Z
为ASCII码,(去除ASCII码前的0),如A为65,不是065;
其它的为VK码,如下所示:
VK值列表
VK_CANCEL
Ctrl+Break
VK_TAB
Tab
VK_RETURN
Enter
VK_SHIFT
Shift
VK_CONTROL
Ctrl
VK_MENU
Alt
VK_LBUTTON 01
鼠标左键
VK_RBUTTON 02
鼠标右键
VK_CANCEL 03
用于执行Ctrl+C或Ctrl+Break
VK_MBUTTON 04
鼠标中键
VK_BACK 08
Backspace键
VK_TAB 09
Tab键
VK_CLEAR
0C
Clear键
VK_RETURN
0D
Enter键
VK_SHIFT
10
Shift键
VK_CONTROL 11
Ctrl键
VK_MENU 12
Arl键
VK_PAUSE
13
Pause键
VK_CAPITAL 14
Capslock键
VK_ESCAPE
1B Ese键
VK_SPACE
20
SpaceBar键
VK_PRIOR | | |