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

Windows 訊息完整參考:TMsg 結構詳解與常用訊息常數表

     編輯:VC 教學

訊息結構:TMsg (對應 Win32 MSG)


type
  TMsg = packed record
    hwnd: HWND;      // 目標視窗句柄
    message: UINT;   // 訊息識別碼 (WM_*)
    wParam: WPARAM;  // 32 位參數 1 (視訊息而定)
    lParam: LPARAM;  // 32 位參數 2 (視訊息而定)
    time: DWORD;     // 訊息投遞時間 (GetMessageTime)
    pt: TPoint;      // 滑鼠螢幕座標 (GetMessagePos)
  end;

欄位詳細說明

欄位類型含義備註
hwndHWND接收訊息的視窗句柄所有可視物件 (視窗、按鈕、編輯框) 均有句柄
messageUINT訊息類別常數系統定義 (WM_*) 或自訂 (WM_USER+ / RegisterWindowMessage)
wParamWPARAM參數 1常為整數、旗標、控制項 ID、虛擬鍵碼
lParamLPARAM參數 2常為指標、座標打包 (LOWORD/HIWORD)、結構指標
timeDWORD訊息建立時間 (毫秒)系統啟動後經過毫秒數,GetMessageTime() 取得
ptTPoint滑鼠螢幕座標訊息投遞時刻的游標位置,GetMessagePos() 取得

參數解碼巨集


// 從 lParam 解析滑鼠座標
#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp))
#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))

// 從 wParam/lParam 解析鍵盤狀態
#define GET_KEYSTATE_WPARAM(wp) ((wp) & 0xFFFF)
#define GET_REPEAT_COUNT(lp)    ((lp) & 0xFFFF)
#define GET_SCAN_CODE(lp)       ((lp >> 16) & 0xFF)
#define IS_EXTENDED_KEY(lp)     ((lp >> 24) & 1)
#define WAS_KEY_DOWN(lp)        ((lp >> 30) & 1)

核心視窗訊息常數表 (節選)

常數十六進位觸發時機
WM_NULL$0000空訊息,常用於測試視窗回應
WM_CREATE$0001視窗建立 (CreateWindowEx 返回前)
WM_DESTROY$0002視窗銷毀 (DestroyWindow 後)
WM_MOVE$0003視窗移動
WM_SIZE$0005視窗大小改變 (wParam: SIZE_MAXIMIZED/MINIMIZED/RESTORED)
WM_ACTIVATE$0006視窗啟用/失活 (LOWORD(wParam): WA_ACTIVE/INACTIVE/CLICKACTIVE)
WM_SETFOCUS$0007獲得鍵盤焦點
WM_KILLFOCUS$0008失去鍵盤焦點
WM_ENABLE$000A啟用/停用視窗
WM_SETREDRAW$000B設定/清除重繪旗標
WM_SETTEXT$000C設定視窗文字 (標題/編輯框內容)
WM_GETTEXT$000D取得視窗文字
WM_GETTEXTLENGTH$000E取得文字長度
WM_PAINT$000F請求繪製客戶區
WM_CLOSE$0010關閉視窗請求 (可攔截取消)
WM_QUERYENDSESSION$0011系統詢問是否允許結束會話
WM_QUIT$0012PostQuitMessage 發送,結束訊息迴圈
WM_QUERYOPEN$0013圖示化視窗請求還原
WM_ERASEBKGND$0014擦除背景 (返回非零表示已處理)
WM_SYSCOLORCHANGE$0015系統顏色變更
WM_SHOWWINDOW$0018視窗顯示/隱藏 (wParam: TRUE/FALSE)
WM_CTLCOLOR$0019控制項顏色請求 (舊版,建議用 WM_CTLCOLORBTN/STATIC/EDIT/LISTBOX/MSGBOX/SCROLLBAR)
WM_SETTINGCHANGE$001A系統設定變更 (lParam 指向區域字串)
WM_DEVMODECHANGE$001B裝置模式變更
WM_ACTIVATEAPP$001C應用程式啟用/切換
WM_FONTCHANGE$001D字體資源變更
WM_TIMECHANGE$001E系統時間變更
WM_CANCELMODE$001F取消模態狀態 (選單/拖放/捲軸)
WM_SETCURSOR$0020設定游標形狀 (滑鼠移入非客戶區/客戶區)
WM_MOUSEACTIVATE$0021非作用中視窗被滑鼠點擊
WM_CHILDACTIVATE$0022MDI 子視窗啟用/移動/大小變更
WM_QUEUESYNC$0023佇列同步 (內部)
WM_GETMINMAXINFO$0024取得視窗最大/最小追蹤尺寸 (MINMAXINFO*)

訊息分類導航

  • 非客戶區 (NC): WM_NCCREATE, WM_NCDESTROY, WM_NCCALCSIZE, WM_NCHITTEST, WM_NCPAINT, WM_NCACTIVATE, WM_NCMOUSEMOVE...
  • 鍵盤: WM_KEYDOWN, WM_KEYUP, WM_CHAR, WM_DEADCHAR, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_SYSCHAR, WM_SYSDEADCHAR...
  • 滑鼠: WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, WM_RBUTTONDOWN, WM_RBUTTONUP, WM_RBUTTONDBLCLK, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_MBUTTONDBLCLK, WM_MOUSEWHEEL, WM_MOUSEHWHEEL...
  • 剪貼簿: WM_CUT, WM_COPY, WM_PASTE, WM_CLEAR, WM_UNDO, WM_RENDERFORMAT, WM_RENDERALLFORMATS, WM_DESTROYCLIPBOARD, WM_DRAWCLIPBOARD, WM_CHANGECBCHAIN...
  • DDE: WM_DDE_INITIATE, WM_DDE_TERMINATE, WM_DDE_ADVISE, WM_DDE_UNADVISE, WM_DDE_ACK, WM_DDE_DATA, WM_DDE_REQUEST, WM_DDE_POKE, WM_DDE_EXECUTE...
  • MDI: WM_MDICREATE, WM_MDIDESTROY, WM_MDIACTIVATE, WM_MDIRESTORE, WM_MDINEXT, WM_MDIMAXIMIZE, WM_MDITILE, WM_MDICASCADE, WM_MDIICONARRANGE, WM_MDIGETACTIVE...

自訂訊息範圍

  • WM_USER (0x0400) 至 0x7FFF:視窗類別私有。
  • WM_APP (0x8000) 至 0xBFFF:應用程式私有 (跨類別安全)。
  • RegisterWindowMessage:系統全域唯一字串 → ID (0xC000~0xFFFF)。

TMsg 結構記憶體佈局圖

這份表單是 Windows 程式開發的「字典」,遇到未知訊息先查表,再查 MSDN,最後才動手實驗。

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