1. 程式人生 > >Windows訊息一覽表

Windows訊息一覽表

訊息,就是指Wi n d o w s發出的一個通知,告訴應用程式某個事情發生了。例如,單擊滑鼠、改變視窗尺寸、按下鍵盤上的一個鍵都會使Wi n d o w s傳送一個訊息給應用程式。訊息本身是作為一個記錄傳遞給應用程式的,這個記錄中包含了訊息的型別以及其他資訊。例如,對於單擊滑鼠所產生的訊息來說,這個記錄中包含了單擊滑鼠時的座標。這個記錄型別叫做T M s g,它

在Wi n d o w s單元中是這樣宣告的:

t y p e

TMsg = packed record

hwnd: HWND; / /視窗控制代碼

message: UINT; / /訊息常量識別符號

wParam: WPA R A M ; // 32位訊息的特定附加資訊

lParam: LPA R A M ; // 32位訊息的特定附加資訊

time: DWORD; / /訊息建立時的時間

pt: TPoint; / /訊息建立時的滑鼠位置

e n d ;

訊息中有什麼?

是否覺得一個訊息記錄中的資訊像希臘語一樣?如果是這樣,那麼看一看下面的解釋:

hwnd 32位的視窗控制代碼。視窗可以是任何型別的螢幕物件,因為Win32能夠維護大多數可

視物件的控制代碼(視窗、對話方塊、按鈕、編輯框等)。

message 用於區別其他訊息的常量值,這些常量可以是Windows單元中預定義的常量,也

可以是自定義的常量。

wParam 通常是一個與訊息有關的常量值,也可能是視窗或控制元件的控制代碼。

lParam 通常是一個指向記憶體中資料的指標。由於W P a r a m、l P a r a m和P o i n t e r都是3 2位的,

因此,它們之間可以相互轉換。

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;

改變enable狀態

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_QUERYENDSESSION訊息後,此訊息傳送給應用程式,

通知它對話是否結束

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 = $0022;

傳送此訊息給MDI子視窗當用戶點選此視窗的標題欄,或當視窗被啟用,移動,改變大小

WM_QUEUESYNC = $0023;

此訊息由基於計算機的訓練程式傳送,通過WH_JOURNALPALYBACK的hook程式

分離出使用者輸入訊息

WM_GETMINMAXINFO = $0024;

此訊息傳送給視窗當它將要改變大小或位置;

WM_PAINTICON = $0026;

傳送給最小化視窗當它圖示將要被重畫

WM_ICONERASEBKGND = $0027;

此訊息傳送給某個最小化視窗,僅當它在畫圖示前它的背景必須被重畫

WM_NEXTDLGCTL = $0028;

傳送此訊息給一個對話方塊程式去更改焦點位置

WM_SPOOLERSTATUS = $002A;

每當列印管理列隊增加或減少一條作業時發出此訊息

WM_DRAWITEM = $002B;

當button,combobox,listbox,menu的可視外觀改變時傳送

此訊息給這些空件的所有者

WM_MEASUREITEM = $002C;

當button, combo box, list box, list view control, or menu item 被建立時

傳送此訊息給控制元件的所有者

WM_DELETEITEM = $002D;

當the list box 或 combo box 被銷燬 或 當 某些項被刪除通過LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT 訊息

WM_VKEYTOITEM = $002E;

此訊息有一個LBS_WANTKEYBOARDINPUT風格的發出給它的所有者來響應WM_KEYDOWN訊息

WM_CHARTOITEM = $002F;

此訊息由一個LBS_WANTKEYBOARDINPUT風格的列表框傳送給他的所有者來響應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;

傳送此訊息給那個視窗的大小和位置已經被改變時,來呼叫setwindowpos函式或其它視窗管理函式

WM_POWER = $0048;(適用於16位的windows)

當系統將要進入暫停狀態時傳送此訊息

WM_COPYDATA = $004A;

當一個應用程式傳遞資料給另一個應用程式時傳送此訊息

WM_CANCELJOURNAL = $004B;

當某個使用者取消程式日誌啟用狀態,提交此訊息給程式

WM_NOTIFY = $004E;

當某個控制元件的某個事件已經發生或這個控制元件需要得到一些資訊時,傳送此訊息給它的父視窗

WM_INPUTLANGCHANGEREQUEST = $0050;

當用戶選擇某種輸入語言,或輸入語言的熱鍵改變

WM_INPUTLANGCHANGE = $0051;

當平臺現場已經被改變後傳送此訊息給受影響的最頂級視窗

WM_TCARD = $0052;

當程式已經初始化windows幫助例程時傳送此訊息給應用程式

WM_HELP = $0053;

此訊息顯示使用者按下了F1,如果某個選單是啟用的,就傳送此訊息個此視窗關聯的選單,否則就

傳送給有焦點的視窗,如果當前都沒有焦點,就把此訊息傳送給當前啟用的視窗

WM_USERCHANGED = $0054;

當用戶已經登入或退出後傳送此訊息給所有的視窗,當用戶登入或退出時系統更新使用者的具體

設定資訊,在使用者更新設定時系統馬上傳送此訊息;

WM_NOTIFYFORMAT = $0055;

公用控制元件,自定義控制元件和他們的父視窗通過此訊息來判斷控制元件是使用ANSI還是UNICODE結構

在WM_NOTIFY訊息,使用此控制元件能使某個控制元件與它的父控制元件之間進行相互通訊

WM_CONTEXTMENU = $007B;

當用戶某個視窗中點選了一下右鍵就傳送此訊息給這個視窗

WM_STYLECHANGING = $007C;

當呼叫SETWINDOWLONG函式將要改變一個或多個 視窗的風格時傳送此訊息給那個視窗

WM_STYLECHANGED = $007D;

當呼叫SETWINDOWLONG函式一個或多個 視窗的風格後傳送此訊息給那個視窗

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_GETDLGCODE = $0087;

傳送此訊息給某個與對話方塊程式關聯的控制元件,widdows控制方位鍵和TAB鍵使輸入進入此控制元件

通過響應WM_GETDLGCODE訊息,應用程式可以把他當成一個特殊的輸入控制元件並能處理它

WM_NCMOUSEMOVE = $00A0;

當游標在一個視窗的非客戶區內移動時傳送此訊息給這個視窗 //非客戶區為:窗體的標題欄及窗

的邊框體

WM_NCLBUTTONDOWN = $00A1;

當游標在一個視窗的非客戶區同時按下滑鼠左鍵時提交此訊息

WM_NCLBUTTONUP = $00A2;

當用戶釋放滑鼠左鍵同時游標某個視窗在非客戶區十發送此訊息;

WM_NCLBUTTONDBLCLK = $00A3;

當用戶雙擊滑鼠左鍵同時游標某個視窗在非客戶區十發送此訊息

WM_NCRBUTTONDOWN = $00A4;

當用戶按下滑鼠右鍵同時游標又在視窗的非客戶區時傳送此訊息

WM_NCRBUTTONUP = $00A5;

當用戶釋放滑鼠右鍵同時游標又在視窗的非客戶區時傳送此訊息

WM_NCRBUTTONDBLCLK = $00A6;

當用戶雙擊滑鼠右鍵同時游標某個視窗在非客戶區十發送此訊息

WM_NCMBUTTONDOWN = $00A7;

當用戶按下滑鼠中鍵同時游標又在視窗的非客戶區時傳送此訊息

WM_NCMBUTTONUP = $00A8;

當用戶釋放滑鼠中鍵同時游標又在視窗的非客戶區時傳送此訊息

WM_NCMBUTTONDBLCLK = $00A9;

當用戶雙擊滑鼠中鍵同時游標又在視窗的非客戶區時傳送此訊息

WM_KEYFIRST = $0100;

WM_KEYDOWN = $0100;

//按下一個鍵
WM_KEYUP = $0101;

//釋放一個鍵

WM_CHAR = $0102;

//按下某鍵,並已發出WM_KEYDOWN, WM_KEYUP訊息

WM_DEADCHAR = $0103;

當用translatemessage函式翻譯WM_KEYUP訊息時傳送此訊息給擁有焦點的視窗

WM_SYSKEYDOWN = $0104;

當用戶按住ALT鍵同時按下其它鍵時提交此訊息給擁有焦點的視窗;

WM_SYSKEYUP = $0105;

當用戶釋放一個鍵同時ALT 鍵還按著時提交此訊息給擁有焦點的視窗

WM_SYSCHAR = $0106;

當WM_SYSKEYDOWN訊息被TRANSLATEMESSAGE函式翻譯後提交此訊息給擁有焦點的視窗

WM_SYSDEADCHAR = $0107;

當WM_SYSKEYDOWN訊息被TRANSLATEMESSAGE函式翻譯後傳送此訊息給擁有焦點的視窗

WM_KEYLAST = $0108;

WM_INITDIALOG = $0110;

在一個對話方塊程式被顯示前傳送此訊息給它,通常用此訊息初始化控制元件和執行其它任務

WM_COMMAND = $0111;

當用戶選擇一條選單命令項或當某個控制元件傳送一條訊息給它的父視窗,一個快捷鍵被翻譯

WM_SYSCOMMAND = $0112;

當用戶選擇視窗選單的一條命令或當用戶選擇最大化或最小化時那個視窗會收到此訊息

WM_TIMER = $0113; //發生了定時器事件

WM_HSCROLL = $0114;

當一個視窗標準水平滾動條產生一個滾動事件時傳送此訊息給那個視窗,也傳送給擁有它的控制元件

WM_VSCROLL = $0115;

當一個視窗標準垂直滾動條產生一個滾動事件時傳送此訊息給那個視窗也,傳送給擁有它的控制元件 WM_INITMENU = $0116;

當一個選單將要被啟用時傳送此訊息,它發生在使用者選單條中的某項或按下某個選單鍵,它允許

程式在顯示前更改選單

WM_INITMENUPOPUP = $0117;

當一個下拉選單或子選單將要被啟用時傳送此訊息,它允許程式在它顯示前更改選單,而不要

改變全部

WM_MENUSELECT = $011F;

當用戶選擇一條選單項時傳送此訊息給選單的所有者(一般是視窗)

WM_MENUCHAR = $0120;

當選單已被啟用使用者按下了某個鍵(不同於加速鍵),傳送此訊息給選單的所有者;

WM_ENTERIDLE = $0121;

當一個模態對話方塊或選單進入空載狀態時傳送此訊息給它的所有者,一個模態對話方塊或選單進入空載狀態就是在處理完一條或幾條先前的訊息後沒有訊息它的列隊中等待

WM_MENURBUTTONUP = $0122;

WM_MENUDRAG = $0123;

WM_MENUGETOBJECT = $0124;

WM_UNINITMENUPOPUP = $0125;

WM_MENUCOMMAND = $0126;

WM_CHANGEUISTATE = $0127;

WM_UPDATEUISTATE = $0128;

WM_QUERYUISTATE = $0129;

WM_CTLCOLORMSGBOX = $0132;

在windows繪製訊息框前傳送此訊息給訊息框的所有者視窗,通過響應這條訊息,所有者視窗可以

通過使用給定的相關顯示裝置的控制代碼來設定訊息框的文字和背景顏色

WM_CTLCOLOREDIT = $0133;

當一個編輯型控制元件將要被繪製時傳送此訊息給它的父視窗;通過響應這條訊息,所有者視窗可以

通過使用給定的相關顯示裝置的控制代碼來設定編輯框的文字和背景顏色

WM_CTLCOLORLISTBOX = $0134;

當一個列表框控制元件將要被繪製前傳送此訊息給它的父視窗;通過響應這條訊息,所有者視窗可以

通過使用給定的相關顯示裝置的控制代碼來設定列表框的文字和背景顏色

WM_CTLCOLORBTN = $0135;

當一個按鈕控制元件將要被繪製時傳送此訊息給它的父視窗;通過響應這條訊息,所有者視窗可以

通過使用給定的相關顯示裝置的控制代碼來設定按紐的文字和背景顏色

WM_CTLCOLORDLG = $0136;

當一個對話方塊控制元件將要被繪製前傳送此訊息給它的父視窗;通過響應這條訊息,所有者視窗可以

通過使用給定的相關顯示裝置的控制代碼來設定對話方塊的文字背景顏色

WM_CTLCOLORSCROLLBAR= $0137;

當一個滾動條控制元件將要被繪製時傳送此訊息給它的父視窗;通過響應這條訊息,所有者視窗可以

通過使用給定的相關顯示裝置的控制代碼來設定滾動條的背景顏色

WM_CTLCOLORSTATIC = $0138;

當一個靜態控制元件將要被繪製時傳送此訊息給它的父視窗;通過響應這條訊息,所有者視窗可以

通過使用給定的相關顯示裝置的控制代碼來設定靜態控制元件的文字和背景顏色

WM_MOUSEFIRST = $0200;

WM_MOUSEMOVE = $0200;

// 移動滑鼠

WM_LBUTTONDOWN = $0201;

//按下滑鼠左鍵

WM_LBUTTONUP = $0202;

//釋放滑鼠左鍵

WM_LBUTTONDBLCLK = $0203;

//雙擊滑鼠左鍵

WM_RBUTTONDOWN = $0204;

//按下滑鼠右鍵

WM_RBUTTONUP = $0205;

//釋放滑鼠右鍵

WM_RBUTTONDBLCLK = $0206;

//雙擊滑鼠右鍵

WM_MBUTTONDOWN = $0207;

//按下滑鼠中鍵

WM_MBUTTONUP = $0208;

//釋放滑鼠中鍵

WM_MBUTTONDBLCLK = $0209;

//雙擊滑鼠中鍵

WM_MOUSEWHEEL = $020A;

當滑鼠輪子轉動時傳送此訊息個當前有焦點的控制元件

WM_MOUSELAST = $020A;

WM_PARENTNOTIFY = $0210;

當MDI子視窗被建立或被銷燬,或使用者按了一下滑鼠鍵而游標在子視窗上時傳送此訊息給它的父視窗

WM_ENTERMENULOOP = $0211;

傳送此訊息通知應用程式的主視窗that已經進入了選單迴圈模式

WM_EXITMENULOOP = $0212;

傳送此訊息通知應用程式的主視窗that已退出了選單迴圈模式

WM_NEXTMENU = $0213;

WM_SIZING = 532;

當用戶正在調整視窗大小時傳送此訊息給視窗;通過此訊息應用程式可以監視視窗大小和位置

也可以修改他們

WM_CAPTURECHANGED = 533;

傳送此訊息 給視窗當它失去捕獲的滑鼠時;

WM_MOVING = 534;

當用戶在移動視窗時傳送此訊息,通過此訊息應用程式可以監視視窗大小和位置

也可以修改他們;

WM_POWERBROADCAST = 536;

此訊息傳送給應用程式來通知它有關電源管理事件;

WM_DEVICECHANGE = 537;

當裝置的硬體配置改變時傳送此訊息給應用程式或裝置驅動程式

WM_IME_STARTCOMPOSITION = $010D;

WM_IME_ENDCOMPOSITION = $010E;

WM_IME_COMPOSITION = $010F;

WM_IME_KEYLAST = $010F;

WM_IME_SETCONTEXT = $0281;

WM_IME_NOTIFY = $0282;

WM_IME_CONTROL = $0283;

WM_IME_COMPOSITIONFULL = $0284;

WM_IME_SELECT = $0285;

WM_IME_CHAR = $0286;

WM_IME_REQUEST = $0288;

WM_IME_KEYDOWN = $0290;

WM_IME_KEYUP = $0291;

WM_MDICREATE = $0220;

應用程式傳送此訊息給多文件的客戶視窗來建立一個MDI 子視窗

WM_MDIDESTROY = $0221;

應用程式傳送此訊息給多文件的客戶視窗來關閉一個MDI 子視窗