消息,就是指Windows發出的一個通知,告訴應用程序某個事情發生了。例如,單擊鼠標、改變窗口尺寸、按下鍵盤上的一個鍵都會使Windows發送一個消息給應用程序。消息本身是作為一個記錄傳遞給應用程序的,這個記錄中包含了消息的類型以及其他信息。例如,對於單擊鼠標所產生的消息來說,這個記錄中包含了單擊鼠標時的坐標。這個記錄類型叫做TMsg,
它在Windows單元中是這樣聲明的:
type
TMsg = packed record
hwnd: HWND; / /窗口句柄
message: UINT; / /消息常量標識符
wParam: WPARAM ; // 32位消息的特定附加信息
lParam: LPARAM ; // 32位消息的特定附加信息
time: DWord; / /消息創建時的時間
pt: TPoint; / /消息創建時的鼠標位置
end;
消息中有什麼?
是否覺得一個消息記錄中的信息像希臘語一樣?如果是這樣,那麼看一看下面的解釋:
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;
發此消息給應用程序哪個窗口是激活的,哪個是非激活的;
W
M_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