嘗試在 `WM_CHAR` 中用 `VK_XXX` 虛擬鍵碼判斷按鍵:
switch(wParam) {
case VK_XXX: // 錯誤!WM_CHAR 不包含虛擬鍵碼
break;
}
| 消息 | wParam 含義 | 適用場景 |
|---|---|---|
| WM_CHAR | 字符碼(ASCII/Unicode) | 文本輸入、字符處理 |
| WM_KEYDOWN | 虛擬鍵碼(VK_XXX) | 功能鍵、組合鍵、遊戲控制 |
| WM_KEYUP | 虛擬鍵碼 | 鍵釋放檢測 |
case WM_CHAR:
TCHAR ch = (TCHAR)wParam;
if (ch >= _T('0') && ch <= _T('9')) {
// 處理數字輸入
} else if (ch == _T('\r')) {
// 回車鍵
} else if (ch == _T('\b')) {
// 退格鍵
}
break;
case WM_KEYDOWN:
switch (wParam) {
case VK_LEFT: // 左方向鍵
case VK_RIGHT: // 右方向鍵
case VK_F1: // F1 鍵
case VK_CONTROL: // Ctrl 鍵
// 處理功能鍵
break;
}
break;
// 判斷組合鍵
if (GetAsyncKeyState(VK_CONTROL) & 0x8000) {
// Ctrl 被按住
}
if (GetKeyState(VK_SHIFT) & 0x8000) {
// Shift 被按住
}