Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Windows 訊息機制完整參考:TMsg 結構解析與常用訊息常數表(WM_CREATE 至 WM_NCACTIVATE)

編輯:XP 系統基礎知識

什麼是 Windows 訊息?

訊息是 Windows 發送給應用程式的通知,告知某事件發生(如滑鼠點擊、視窗大小變更、鍵盤輸入)。訊息以記錄 TMsg 傳遞,包含訊息類型與相關資訊(如滑鼠座標)。

TMsg 結構定義

type
TMsg = packed record
hwnd: HWND;         // 視窗控制代碼
message: UINT;      // 訊息常數識別碼
wParam: WPARAM;     // 32 位訊息特定附加資訊
lParam: LPARAM;     // 32 位訊息特定附加資訊
time: DWORD;        // 訊息建立時間
pt: TPoint;         // 訊息建立時滑鼠位置
end;
  • hwnd:32 位視窗控制代碼,任何可視物件(視窗、對話框、按鈕、編輯框)皆有。
  • message:區分訊息的常數值,預定義於 Windows 單元或自訂。
  • wParam:通常為與訊息相關的常數或控制代碼。
  • lParam:通常為指向記憶體資料的指標。WPARAM、LPARAM、Pointer 均 32 位,可互轉。

常用訊息常數表 (十六進位)

常數值說明
WM_NULL$0000空訊息
WM_CREATE$0001應用程式建立視窗
WM_DESTROY$0002視窗被銷毀
WM_MOVE$0003移動視窗
WM_SIZE$0005改變視窗大小
WM_ACTIVATE$0006視窗被啟用或失去啟用
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使用者選擇結束對話框或呼叫 ExitWindows
WM_QUIT$0012結束程式運行或呼叫 PostQuitMessage
WM_QUERYOPEN$0013視窗恢復原大小位置時發送給圖示
WM_ERASEBKGND$0014視窗背景必須被擦除
WM_SYSCOLORCHANGE$0015系統顏色改變,發送給所有頂層視窗
WM_ENDSESSION$0016通知應用程式對話是否結束
WM_SYSTEMERROR$0017系統錯誤
WM_SHOWWINDOW$0018隱藏/顯示視窗
WM_ACTIVATEAPP$001C通知應用程式哪視窗啟用/非啟用
WM_FONTCHANGE$001D系統字體資源庫變化
WM_TIMECHANGE$001E系統時間變化
WM_CANCELMODE$001F取消進行中的模態操作
WM_SETCURSOR$0020滑鼠移動且未捕獲輸入時
WM_MOUSEACTIVATE$0021游標在非啟用視窗中且按下滑鼠鍵
WM_CHILDACTIVATE$0022MDI 子視窗被點擊標題列、啟用、移動、改變大小
WM_QUEUESYNC$0023CBT 程式透過 WH_JOURNALPLAYBACK hook 分離使用者輸入
WM_GETMINMAXINFO$0024視窗即將改變大小/位置
WM_PAINTICON$0026最小化視窗圖示將重繪
WM_ICONERASEBKGND$0027最小化視窗繪製圖示前背景需重繪
WM_NEXTDLGCTL$0028對話框程式改變焦點位置
WM_SPOOLERSTATUS$002A列印隊列增減作業
WM_DRAWITEM$002BButton/Combobox/Listbox/Menu 視覺外觀改變
WM_MEASUREITEM$002C控件建立時通知擁有者尺寸
WM_DELETEITEM$002DListbox/Combobox 被銷毀或項目刪除
WM_VKEYTOITEM$002ELBS_WANTKEYBOARDINPUT 風格響應 WM_KEYDOWN
WM_CHARTOITEM$002F同上響應 WM_CHAR
WM_SETFONT$0030繪製文字時取得控件字體
WM_GETFONT$0031取得目前控件繪製文字字體
WM_SETHOTKEY$0032視窗與熱鍵關聯
WM_GETHOTKEY$0033判斷熱鍵與視窗關聯
WM_QUERYDRAGICON$0037最小化視窗拖放需圖示
WM_COMPAREITEM$0039判定 Combobox/Listbox 新項相對位置
WM_GETOBJECT$003D取得物件介面
WM_COMPACTING$0041顯示記憶體不足
WM_WINDOWPOSCHANGING$0046視窗大小位置即將改變 (SetWindowPos)
WM_WINDOWPOSCHANGED$0047視窗大小位置已改變
WM_POWER$0048系統即將進入暫停 (16 位)
WM_COPYDATA$004A應用程式間傳遞資料
WM_CANCELJOURNAL$004B使用者取消程式日誌啟用
WM_NOTIFY$004E控件事件發生或需資訊,通知父視窗
WM_INPUTLANGCHANGEREQUEST$0050使用者選擇輸入語言或熱鍵改變
WM_INPUTLANGCHANGE$0051輸入語言環境已改變
WM_TCARD$0052程式初始化 Windows Help
WM_HELP$0053使用者按 F1,發送給相關選單/視窗
WM_USERCHANGED$0054使用者登入/登出,更新設定
WM_NOTIFYFORMAT$0055判斷控件用 ANSI/UNICODE 結構
WM_CONTEXTMENU$007B視窗中右鍵點擊
WM_STYLECHANGING$007CSetWindowLong 即將改變視窗風格
WM_STYLECHANGED$007DSetWindowLong 已改變視窗風格
WM_DISPLAYCHANGE$007E顯示器解析度改變
WM_GETICON$007F取得視窗大/小圖示控制代碼
WM_SETICON$0080設定視窗大/小圖示
WM_NCCREATE$0081視窗首次建立,在 WM_CREATE 前
WM_NCDESTROY$0082非用戶區正在銷毀
WM_NCCALCSIZE$0083計算用戶區域
WM_NCHITTEST$0084滑鼠移動、按下、釋放
WM_NCPAINT$0085視窗框架需繪製
WM_NCACTIVATE$0086非用戶區啟用狀態改變

此表涵蓋從 WM_NULL 至 WM_NCACTIVATE 的核心訊息,供視窗程式開發查閱。

Copyright © Windows教程網 All Rights Reserved