一、參數概述
wparam是Windows操作系統中消息處理機制中一個重要的參數,它一般用於攜帶消息的附加數據和控制消息的行為。具體而言,wparam的數據類型是WPARAM,它是一個32位無符號整數,其值的含義、作用以及處理方式根據發送或接收的消息不同而不同。
消息機制是Windows操作系統的核心機制之一,它實現了進程間通信的基礎。消息機制是指通過消息傳遞的機制來實現進程間數據和通信的一種方式。在Windows系統中,消息機制是通過發送和接收消息進行的。發送消息的窗口將一個消息傳遞給接收消息的窗口,這個傳遞的過程就是消息機制。
二、常見消息中的wparam參數詳解
1. WM_COMMAND 消息
wParam參數: 如果命令是加速鍵,則此值為加速鍵的 ASCII 字符值。例如,如果用戶按下 ALT+F,則 wParam 將為 'F'。 如果命令來自控件,則此值是控件的標識符。當然,如果您的應用程序由多個對話框組成,則需要相應地修改標識符。 否則,此值是菜單項的標識符。如果系統菜單被選中,則此值是包含菜單項的菜單的句柄。
2. WM_KEYDOWN 消息
wParam參數: 重複計數(位30-16) —— 重複計數指定如何處理自動重複擊鍵。當用戶按住一個鍵時,系統將在短時間內重複發送相同的消息。由於這可能會導致性能下降,因此 Windows 將嘗試根據用戶的鍵盤速度和重複延遲來動態選擇重複計數。如果應用程序不處理此消息,那麼應用程序將接收一系列 WM_KEYDOWN 和 WM_KEYUP 消息,以指示用戶有哪些鍵被按下。 擴展鍵(位24) —— 如果是擴展鍵,則此位設置為 1。 先前鍵狀態(位0) —— 該位指示這個鍵是在上一次事件中被按下還是被放開。該位被設置為 1,以指示鍵是在上一次事件中被釋放的。完整的鍵狀態信息可在消息的 lParam 參數中獲得。
3. WM_LBUTTONDOWN 消息
wParam參數:在這種情況下,此參數沒有意義。
4. WM_PAINT 消息
wParam參數: 如果更新區已被擦除,則此值為非零。否則它的值為零。
5. WM_NCLBUTTONDOWN 消息
wParam參數: 與 WM_LBUTTONDOWN 消息的 wParam 參數相同。然而,在 WM_NCLBUTTONDOWN 消息中,這個值指示了按下的鼠標鍵,可以是下面列出的值之一: WPARAM 鼠標鍵 MK_LBUTTON 左鍵 MK_RBUTTON 右鍵 MK_SHIFT SHIFT 鍵 MK_CONTROL CTRL 鍵 MK_MBUTTON 中間鍵 MK_XBUTTON1 X1 鼠標鍵 MK_XBUTTON2 X2 鼠標鍵
三、代碼示例
case WM_COMMAND: { int wmId = LOWORD(wParam); // 分析菜單選擇: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } } break; case WM_KEYDOWN: { switch (wParam) { case VK_RIGHT: xSpeed = 1; ySpeed = 0; break; case VK_LEFT: xSpeed = -1; ySpeed = 0; break; case VK_UP: xSpeed = 0; ySpeed = -1; break; case VK_DOWN: xSpeed = 0; ySpeed = 1; break; default: break; } } break; case WM_LBUTTONDOWN: { // do something } break; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // TODO: 在此添加任意繪圖代碼... EndPaint(hWnd, &ps); } break; case WM_NCLBUTTONDOWN: { if (wParam == MK_LBUTTON) { // do something } } break;
四、結語
通過對wparam參數的詳細闡述和常見消息中對wparam參數的應用,我們可以更加深刻地理解Windows操作系統中消息機制的實現原理,提高對消息處理的認識和技能。
原創文章,作者:EWNVW,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/369348.html