首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Windows API WM_COMMAND 訊息 wParam 為 0 的原因與排查

     編輯:程式設計綜合問答

現象描述

使用純 Win32 API 建立視窗與按鈕,點擊按鈕時 WM_COMMAND 的 wParam 恆為 0,lParam 正確指向按鈕控制項控制代碼。

根本原因

按鈕控制項建立時未指定 HMENU 參數(即控制項 ID)。CreateWindow 的第 10 參數 hMenu 在建立子視窗時作為控制項 ID 傳遞給父視窗。若傳 NULL,系統不會分配 ID,導致 WM_COMMAND 的 LOWORD(wParam)(控制項 ID)為 0。

修正方法

#define ID_MY_BUTTON 1001

HWND hBtn = CreateWindow(
    L"BUTTON", L"點我",
    WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
    10, 10, 100, 30,
    hWnd, (HMENU)ID_MY_BUTTON, hInst, NULL);

接著在訊息迴圈中判斷:

case WM_COMMAND:
    if (LOWORD(wParam) == ID_MY_BUTTON && HIWORD(wParam) == BN_CLICKED) {
        // 按鈕被點擊
    }
    break;

驗證工具

使用 Spy++ 監控訊息,可清楚看到 WM_COMMAND 的完整參數結構,確認控制項 ID 是否正確傳遞。

參考文件

MSDN: WM_COMMAND message

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