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)系統(tǒng)消息:(系統(tǒng)鍵Alt,F(xiàn)10等),由系統(tǒng)內(nèi)部處理
WM_SYSKEYDOWN
WM_SYSKEYUP
WM_SYSCHAR
(2)非系統(tǒng)消息:
WM_KEYDOWN
WM_KEYUP
WM_CHAR
二、添加消息(一般WM_KEYDOWN),在消息響應(yīng)函數(shù)
OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
有三個變量,nChar這是虛擬鍵代碼,另外兩個不常用,用時參看MSDN。
如果要響應(yīng)組合鍵,可以用GetAsyncKeyState()檢測按鍵狀態(tài)
如:
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
鼠標(biāo)左鍵
VK_RBUTTON 02
鼠標(biāo)右鍵
VK_CANCEL 03
用于執(zhí)行Ctrl+C或Ctrl+Break
VK_MBUTTON 04
鼠標(biāo)中鍵
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 | | | |