| 符號常數 | 十六進制 | 對應按鍵 |
|---|---|---|
| VK_LBUTTON | 0x01 | 滑鼠左鍵 |
| VK_RBUTTON | 0x02 | 滑鼠右鍵 |
| VK_CANCEL | 0x03 | Control-Break |
| VK_MBUTTON | 0x04 | 滑鼠中鍵 |
| VK_BACK | 0x08 | BACKSPACE |
| VK_TAB | 0x09 | TAB |
| VK_CLEAR | 0x0C | CLEAR |
| VK_RETURN | 0x0D | ENTER |
| VK_SHIFT | 0x10 | SHIFT |
| VK_CONTROL | 0x11 | CTRL |
| VK_MENU | 0x12 | ALT |
| VK_PAUSE | 0x13 | PAUSE |
| VK_CAPITAL | 0x14 | CAPS LOCK |
| VK_ESCAPE | 0x1B | ESC |
| VK_SPACE | 0x20 | SPACEBAR |
| VK_PRIOR | 0x21 | PAGE UP |
| VK_NEXT | 0x22 | PAGE DOWN |
| VK_END | 0x23 | END |
| VK_HOME | 0x24 | HOME |
| VK_LEFT | 0x25 | LEFT ARROW |
| VK_UP | 0x26 | UP ARROW |
| VK_RIGHT | 0x27 | RIGHT ARROW |
| VK_DOWN | 0x28 | DOWN ARROW |
| VK_SELECT | 0x29 | SELECT |
| VK_EXECUTE | 0x2B | EXECUTE |
| VK_SNAPSHOT | 0x2C | PRINT SCREEN |
| VK_INSERT | 0x2D | INS |
| VK_DELETE | 0x2E | DEL |
| VK_HELP | 0x2F | HELP |
| VK_LWIN | 0x5B | 左 Windows 鍵 |
| VK_RWIN | 0x5C | 右 Windows 鍵 |
| VK_APPS | 0x5D | 應用程式鍵 |
| VK_NUMPAD0~9 | 0x60~0x69 | 數字鍵盤 0~9 |
| VK_MULTIPLY | 0x6A | * |
| VK_ADD | 0x6B | + |
| VK_SEPARATOR | 0x6C | 分隔符 |
| VK_SUBTRACT | 0x6D | - |
| VK_DECIMAL | 0x6E | . |
| VK_DIVIDE | 0x6F | / |
| VK_F1~F24 | 0x70~0x87 | F1~F24 |
| VK_NUMLOCK | 0x90 | NUM LOCK |
| VK_SCROLL | 0x91 | SCROLL LOCK |
字母鍵與主鍵盤數字鍵:直接用單引號字元,如 'A'、'1'。
BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN) {
if (pMsg->wParam == 'M') { // 或 VK_NUMPAD1 等虛擬鍵碼
MessageBox(_T("Hello!"));
return TRUE; // 已處理,不再傳遞
}
}
return CDialog::PreTranslateMessage(pMsg);
}
BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN) {
switch (pMsg->wParam) {
case VK_ESCAPE:
SetFocus();
return TRUE;
case 'X':
// GetKeyState 高位元為 1 表示按下
if (GetKeyState(VK_CONTROL) < 0) { // Ctrl+X
MessageBox(_T("Ctrl+X pressed!"));
return TRUE;
}
// 若要攔截 Shift+X,改用 VK_SHIFT
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
PreTranslateMessage 是攔截鍵盤訊息的最佳位置,早於控件處理。GetKeyState(VK_CONTROL) < 0 判斷修飾鍵是否按下(高位元為 1)。wParam 為大寫 ASCII 碼('A'~'Z'),不區分大小寫。VK_NUMPAD0 等) 與主鍵盤數字鍵 ('0'~'9') 不同。熟記常用虛擬鍵碼,善用 PreTranslateMessage 搭配 GetKeyState,即可靈活實作熱鍵、快捷鍵、遊戲按鍵等鍵盤互動功能。