《MFC編程之Windows消息》要點:
本文介紹了MFC編程之Windows消息,希望對您有用。如果有疑問,可以聯系我們。
相關主題:桌面軟件開發
消息,就是指Windows發出的一個通知,告訴應用程序某個事情發生了。例如,單擊鼠標、改變窗口尺寸、按下鍵盤上的一個鍵都會使Windows發送一個消息給應用程序。消息本身是作為一個記錄傳遞給應用程序的,這個記錄中包含了消息的類型以及其他信息。例如,對于單擊鼠標所產生的消息來說,這個記錄中包含了單擊鼠標時的坐標。這個記錄類型叫做TMsg,它在Windows單元中是這樣聲明的:
type
TMsg=packedrecord
hwnd: HWND; //窗口句柄
message: UINT; //消息常量標識符
wParam: WPARAM; //32位消息的特定附加信息
lParam: LPARAM; //32位消息的特定附加信息
time: DWORD; //消息創建時的時間
pt: TPoint; //消息創建時的鼠標位置
end;
消息中有什么?
Hwnd 32位的窗口句柄。窗口可以是任何類型的屏幕對象,因為Win32能夠維護大多數可視對象的句柄(窗口、對話框、按鈕、編輯框等)。
message 用于區別其他消息的常量值,這些常量可以是Windows單元中預定義的常量,也可以是自定義的常量。
wParam 通常是一個與消息有關的常量值,也可能是窗口或控件的句柄。
lParam 通常是一個指向內存中數據的指針。由于WParam、lParam和Pointer都是32位的,因此,它們之間可以相互轉換。
2. windows消息
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,combobox,listbox,listviewcontrol,ormenuitem被創建時發送此消息給控件的所有者
WM_DELETEITEM=$002D; 當thelistbox或combobox被銷毀或當某些項被刪除通過LB_DELETESTRING,LB_RESETCONTENT,CB_DELETESTRING,orCB_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_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; 當一個靜態控件將要被繪制時發送此消息給它的父窗口;通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置靜態控件的文本和背景顏色
轉載請注明本頁網址:
http://www.fzlkiss.com/jiaocheng/95.html