看到Joforn的BLOG上有這麼一篇文章,覺得很不錯,就轉載過來了
WINDOWS訊息經常使用十六進位的常數
[摺疊]
訊息,就是指Windows發出的一個通知,告訴應用程式某個事情發生了。例如,單擊滑鼠、改變視窗尺寸、按下鍵盤上的一個鍵都會使Wi n d o w s發送一個訊息給應用程式。
訊息本身是作為一個記錄傳遞給應用程式的,這個記錄中包含了訊息的類型以及其他資訊。例如,對於單擊滑鼠所產生的訊息來說,這個記錄中包含了單擊滑鼠時的座標。這個記錄類型叫做T M s g,它在Wi n d o w s單元中是這樣聲明的:
type
TMsg = packed record
hwnd: HWND; / /視窗控制代碼
message: UINT; / /訊息常量標識符
wParam: WPA R A M ; // 32位訊息的特定附加資訊
lParam: LPA R A M ; // 32位訊息的特定附加資訊
time: DWORD; / /訊息建立時的時間
pt: TPoint; / /訊息建立時的滑鼠位置
end ;
訊息中有什嗎? 是否覺得一個訊息記錄中的資訊像希臘語一樣?如果是這樣,那麼看一看下面的 解釋:
hwnd 32位的視窗控制代碼。視窗可以是任何類型的螢幕對象,因為Win32能夠維護大多數可視對象的控制代碼(視窗、對話方塊、按鈕、編輯框等)。
message 用於區別其他訊息的常量值,這些常量可以是Windows單元中預定義的常量,也可以是自訂的常量。
wParam 通常是一個與訊息有關的常量值,也可能是視窗或控制項的控制代碼。
lParam 通常是一個指向記憶體中資料的指標。
由於WParam、lParam和Pointer都是32位的,因此,它們之間可以相互轉換。
WM_NULL = &H0000;
WM_CREATE = &H0001; '應用程式建立一個視窗
WM_DESTROY = &H0002; '一個視窗被銷毀
WM_MOVE = &H0003; '移動一個視窗
WM_SIZE = &H0005; '改變一個視窗的大小
WM_ACTIVATE = &H0006; '一個視窗被啟用或失去啟用狀態;
WM_SETFOCUS = &H0007; '獲得焦點後
WM_KILLFOCUS = &H0008; '失去焦點
WM_ENABLE = &H000A; '改變enable狀態
WM_SETREDRAW = &H000B; '設定視窗是否能重畫
WM_SETTEXT = &H000C; '應用程式發送此訊息來設定一個視窗的文本
WM_GETTEXT = &H000D; ' 應用程式發送此訊息來複製對應視窗的文本到緩衝區
WM_GETTEXTLENGTH = &H000E; '得到與一個視窗有關的文本的長度(不包含Null 字元)
WM_PAINT = &H000F; '要求一個視窗重畫自己
WM_CLOSE = &H0010; '當一個視窗或應用程式要關閉時發送一個訊號
WM_QUERYENDSESSION = &H0011; '當使用者選擇結束對話方塊或程式自己調用ExitWindows函數
WM_QUIT = &H0012; '用來結束程式運行或當程式調用postquitmessage函數
WM_QUERYOPEN = &H0013; '當使用者視窗恢複以前的大小位置時,把此訊息發送給某個表徵圖
WM_ERASEBKGND = &H0014; '當視窗背景必須被擦除時(例在視窗改變大小時)
WM_SYSCOLORCHANGE = &H0015; '當系統色彩改變時,發送此訊息給所有最上層視窗
WM_ENDSESSION = &H0016; '當系統進程發出WM_QUERYENDSESSION訊息後,此訊息發送給應用程式,通知它對話是否結束
WM_SYSTEMERROR = &H0017;
WM_SHOWWINDOW = &H0018; '當隱藏或顯示視窗是發送此訊息給這個視窗
WM_ACTIVATEAPP = &H001C; '發此訊息給應用程式哪個視窗是啟用的,哪個是非啟用的;
WM_FONTCHANGE = &H001D; '當系統的字型資源庫變化時發送此訊息給所有最上層視窗
WM_TIMECHANGE = &H001E; '當系統的時間變化時發送此訊息給所有最上層視窗
WM_CANCELMODE = &H001F; '發送此訊息來取消某種進行中的摸態(操作)
WM_SETCURSOR = &H0020; '如果滑鼠引起游標在某個視窗中移動且滑鼠輸入沒有被捕獲時,就發訊息給某個視窗
WM_MOUSEACTIVATE = &H0021; '當游標在某個非啟用的視窗中而使用者正按著滑鼠的某個鍵發送此訊息給當前視窗
WM_CHILDACTIVATE = &H0022; '發送此訊息給MDI子視窗當使用者點擊此視窗的標題列,或當視窗被啟用,移動,改變大小
WM_QUEUESYNC = &H0023;
此訊息由基於電腦的訓練程式發送,通過WH_JOURNALPALYBACK的hook程式分離出使用者輸入訊息
WM_GETMINMAXINFO = &H0024; '此訊息發送給視窗當它將要改變大小或位置;
WM_PAINTICON = &H0026; '發送給已最小化的視窗當它表徵圖將要被重畫
WM_ICONERASEBKGND = &H0027; '此訊息發送給某個已最小化的視窗,僅當它在畫表徵圖前它的背景必須被重畫
WM_NEXTDLGCTL = &H0028; '發送此訊息給一個對話方塊程式去更改焦點位置
WM_SPOOLERSTATUS = &H002A; '每當列印管理列隊增加或減少一條作業時發出此訊息
WM_DRAWITEM = &H002B; '當button,combobox,listbox,menu的可視外觀改變時發送此訊息給這些空件的所有者
WM_MEASUREITEM = &H002C; '當button, combo box, list box, list view control, or menu item 被建立時發送此訊息給控制項的所有者
WM_DELETEITEM = &H002D;’當the list box 或 combo box 被銷毀 或 當 某些項被刪除通過LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT 訊息
WM_VKEYTOITEM = &H002E; '此訊息有一個LBS_WANTKEYBOARDINPUT風格的發出給它的所有者來響應WM_KEYDOWN訊息
WM_CHARTOITEM = &H002F; '此訊息由一個LBS_WANTKEYBOARDINPUT風格的列表框發送給他的所有者來響應WM_CHAR訊息
WM_SETFONT = &H0030; '當繪製文本時程式發送此訊息得到控制項要用的顏色
WM_GETFONT = &H0031; '應用程式發送此訊息得到當前控制項繪製文本的字型
WM_SETHOTKEY = &H0032; '應用程式發送此訊息讓一個視窗與一個熱鍵相關連
WM_GETHOTKEY = &H0033; '應用程式發送此訊息來判斷熱鍵與某個視窗是否有關聯
WM_QUERYDRAGICON = &H0037; '此訊息發送給已最小化的視窗,當此視窗將要被拖放而它的類中沒有定義表徵圖,應用程式能返回一個表徵圖或游標的控制代碼,當使用者拖放表徵圖時系統顯示這個表徵圖或游標
WM_COMPAREITEM = &H0039; '發送此訊息來判定combobox或listbox新增加的項的相對位置
WM_GETOBJECT = &H003D;
WM_COMPACTING = &H0041; '顯示記憶體已經很少了
WM_WINDOWPOSCHANGING= &H0046;