首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 虛擬鍵碼完整對照表與鍵盤訊息處理實戰範例

     編輯:VC 教學

虛擬鍵碼 (Virtual-Key Codes) 完整對照表

符號常數十六進制對應按鍵
VK_LBUTTON0x01滑鼠左鍵
VK_RBUTTON0x02滑鼠右鍵
VK_CANCEL0x03Control-Break
VK_MBUTTON0x04滑鼠中鍵
VK_BACK0x08BACKSPACE
VK_TAB0x09TAB
VK_CLEAR0x0CCLEAR
VK_RETURN0x0DENTER
VK_SHIFT0x10SHIFT
VK_CONTROL0x11CTRL
VK_MENU0x12ALT
VK_PAUSE0x13PAUSE
VK_CAPITAL0x14CAPS LOCK
VK_ESCAPE0x1BESC
VK_SPACE0x20SPACEBAR
VK_PRIOR0x21PAGE UP
VK_NEXT0x22PAGE DOWN
VK_END0x23END
VK_HOME0x24HOME
VK_LEFT0x25LEFT ARROW
VK_UP0x26UP ARROW
VK_RIGHT0x27RIGHT ARROW
VK_DOWN0x28DOWN ARROW
VK_SELECT0x29SELECT
VK_EXECUTE0x2BEXECUTE
VK_SNAPSHOT0x2CPRINT SCREEN
VK_INSERT0x2DINS
VK_DELETE0x2EDEL
VK_HELP0x2FHELP
VK_LWIN0x5B左 Windows 鍵
VK_RWIN0x5C右 Windows 鍵
VK_APPS0x5D應用程式鍵
VK_NUMPAD0~90x60~0x69數字鍵盤 0~9
VK_MULTIPLY0x6A*
VK_ADD0x6B+
VK_SEPARATOR0x6C分隔符
VK_SUBTRACT0x6D-
VK_DECIMAL0x6E.
VK_DIVIDE0x6F/
VK_F1~F240x70~0x87F1~F24
VK_NUMLOCK0x90NUM LOCK
VK_SCROLL0x91SCROLL LOCK

字母鍵與主鍵盤數字鍵:直接用單引號字元,如 'A'、'1'。

實戰範例:鍵盤訊息處理

範例一:單一按鍵攔截 (PreTranslateMessage)

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,即可靈活實作熱鍵、快捷鍵、遊戲按鍵等鍵盤互動功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved