Windows 常用消息大全


表A-1  Windows消息分布

消息范圍

說 明

0 ~ WM_USER – 1

系統消息

WM_USER ~ 0x7FFF

自定義窗口類整數消息

WM_APP ~ 0xBFFF

應用程序自定義消息

0xC000 ~ 0xFFFF

應用程序字符串消息

> 0xFFFF

為以后系統應用保留

表A-2  常用Windows消息

消息名稱

說  明

WM_NULL 

0x0000

空消息,此消息將被接收窗口忽略

WM_CREATE 

0x0001

應用程序創建一個窗口

WM_DESTROY

0x0002

一個窗口被銷毀

WM_MOVE

0x0003

移動一個窗口

WM_SIZE

0x0005

改變一個窗口的大小

WM_ACTIVATE

0x0006

一個窗口被激活或失去激活狀態

WM_SETFOCUS

0x0007

獲得焦點后

WM_KILLFOCUS

0x0008

失去焦點

WM_ENABLE

0x000A

應用程序Enable狀態改變時產生

WM_SETREDRAW

0x000B

設置窗口是否能重畫

WM_SETTEXT

0x000C

應用程序發送此消息來設置一個窗口的文本

WM_GETTEXT

0x000D

應用程序發送此消息來復制對應窗口的文本到緩沖區

WM_GETTEXTLENGTH

0x000E

得到與一個窗口有關的文本的長度(不包含空字符)

WM_PAINT

0x000F

要求一個窗口重繪自己

WM_CLOSE

0x0010

當一個窗口或應用程序要關閉時發送一個信號

WM_QUERYENDSESSION

0x0011

用戶選擇結束對話框或應用程序自己調用ExitWindows()函數

WM_QUIT

0x0012

用來結束程序運行或應用程序調用Postquitmessage()函數來產生此消息

WM_QUERYOPEN

0x0013

當用戶窗口恢復以前的大小位置時,把此消息發送給某個圖標

WM_ERASEBKGND

0x0014

當窗口背景必須被擦除時(例如在窗口改變大小時)

WM_SYSCOLORCHANGE

0x0015

當系統顏色改變時,發送此消息給所有頂級窗口

WM_ENDSESSION

0x0016

當系統進程發出WM_QUERYENDSESSION消息后,此消息發送給應用程序

WM_SHOWWINDOW

0x0018

當隱藏或顯示窗口是發送此消息給這個窗口

WM_ACTIVATEAPP

0x001C

當某個窗口將被激活時,將被激活窗口和當前活動(即將失去激活)窗口會收到此消息,發此消息給應用程序哪個窗口是激活的,哪個是非激活的

WM_FONTCHANGE

0x001D

當系統的字體資源庫變化時發送此消息給所有頂級窗口

WM_TIMECHANGE

0x001E

當系統的時間變化時發送此消息給所有頂級窗口

WM_CANCELMODE

0x001F

發送此消息來取消某種正在進行的操作

WM_SETCURSOR

0x0020

如果鼠標引起光標在某個窗口中移動且鼠標輸入沒有被捕獲時,發消息給該窗口

WM_MOUSEACTIVATE

0x0021

當光標在某個非激活的窗口中而用戶正按着鼠標的某個鍵發送此消息給當前窗口

WM_CHILDACTIVATE

0x0022

發送此消息給MDI子窗口當用戶點擊此窗口的標題欄,或當窗口被激活、移動、改變大小

WM_QUEUESYNC

0x0023

此消息由基於計算機的訓練程序發送,通過WH_JOURNALPALYBACK的Hook程序分離出用戶輸入消息

WM_GETMINMAXINFO

0x0024

當窗口要將要改變大小或位置時,發送此消息給該窗口

WM_PAINTICON

0x0026

當窗口圖標將要被重繪時,發送此消息給該窗口

WM_ICONERASEBKGND

0x0027

在一個最小化窗口的圖標在重繪前,當圖標背景必須被重繪時,發送此消息給該窗口

WM_NEXTDLGCTL

0x0028

發送此消息給一個對話框程序以更改焦點位置

WM_SPOOLERSTATUS

0x002A

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

WM_DRAWITEM

0x002B

當Button,ComboBox,Listbox,Menu控件的外觀改變時,發送此消息給這些控件的所有者

WM_MEASUREITEM

0x002C

當Button,ComboBox,list box,ListView,Menu 項被創建時,發送此消息給控件的所有者

WM_DELETEITEM

0x002D

當ListBox 或 ComboBox 被銷毀或當某些項通過發送LB_DELETESTRING、LB_RESETCONTENT、 CB_DELETESTRING、CB_RESETCONTENT 消息被刪除時,發送此消息給控件的所有者

WM_VKEYTOITEM

0x002E

一個具有LBS_WANTKEYBOARDINPUT風格的ListBox控件發送此消息給它的所有者,以此來響應WM_KEYDOWN消息

WM_CHARTOITEM

0x002F

一個具有LBS_WANTKEYBOARDINPUT風格的ListBox控件發送此消息給它的所有者,以此來響應WM_CHAR消息

WM_SETFONT

0x0030

應用程序繪制控件時,發送此消息得到以何種字體繪制控件中的文本

WM_GETFONT

0x0031

應用程序發送此消息得到當前控件繪制文本的字體

WM_SETHOTKEY

0x0032

應用程序發送此消息讓一個窗口與一個熱鍵相關聯

WM_GETHOTKEY

0x0033

應用程序發送此消息來判斷熱鍵與某個窗口是否有關聯

WM_QUERYDRAGICON

0x0037

此消息發送給最小化窗口,當此窗口將要被拖放而它的類中沒有定義圖標,應用程序就返回一個圖標或光標的句柄,當用戶拖放圖標時系統顯示這個圖標或光標

WM_COMPAREITEM

0x0039

發送此消息來判定ComboBox或ListBox新增加的項的相對位置

WM_COMPACTING

0x0041

顯示內存已經很少了

WM_WINDOWPOSCHANGING

0x0046

當調用SetWindowPos()函數改變窗口的大小和位置后,發送此消息給該窗口

WM_POWER

0x0048

當系統將進入掛起狀態時發送此消息給所有進程

WM_COPYDATA

0x004A

當一個應用程序傳遞數據給另一個應用程序時發送此消息

WM_CANCELJOURNAL

0x004B

當某個用戶取消程序日志激活狀態,發送此消息給應用程序

WM_NOTIFY

0x004E

當某個控件的某個事件已經發生或這個控件需要得到一些信息時,發送此消息給它的父窗口

WM_INPUTLANGCHANGEREQUEST

0x0050

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

WM_INPUTLANGCHANGE

0x0051

當應用程序輸入語言改變后發送此消息給受影響的最頂級窗口

WM_TCARD

0x0052

當應用程序已經初始化Windows幫助例程時發送此消息給應用程序

WM_HELP

0x0053

當用戶按下了F1,如果某個菜單是激活的,就發送此消息給此窗口關聯的菜單,否則就發送給有焦點的窗口,如果當前都沒有焦點,就把此消息發送給當前激活的窗口

WM_USERCHANGED

0x0054

當用戶已經登錄或退出后發送此消息給所有的窗口,當用戶登錄或退出時系統更新用戶的具體設置信息,在用戶更新設置時系統馬上發送此消息

WM_NOTIFYFORMAT

0x0055

公用控件和它們的父窗口通過此消息來判斷在WM_NOTIFY消息中是使用ANSI還是UNICODE形式的結構,使用此控件能使某個控件與它的父控件進行相互通信

WM_CONTEXTMENU

0x007B

當用戶在某個窗口中點擊右鍵,則發送此消息給該窗口

WM_STYLECHANGING

0x007C

當將要調用SetWindowLong()函數窗口的一個或多個風格時,發送此消息給該窗口

WM_STYLECHANGED

0x007D

當調用SetWindowLong()函數改變了窗口的一個或多個風格后,發送此消息給該窗口

WM_DISPLAYCHANGE

0x007E

當顯示器的分辨率改變后發送此消息給所有的窗口

WM_GETICON

0x007F

發送此消息給某個窗口,返回與某個窗口有關聯的大圖標或小圖標的句柄

WM_SETICON

0x0080

應用程序發送此消息讓一個新的大圖標或小圖標與某個窗口關聯

WM_NCCREATE

0x0081

當某個窗口第一次被創建時,此消息在WM_CREATE消息被發送前發送

WM_NCDESTROY

0x0082

此消息通知某個窗口,正在銷毀非客戶區

WM_NCCALCSIZE

0x0083

當計算某個窗口的客戶區大小和位置時發送此消息

WM_NCHITTEST

0x0084

移動鼠標,按住或釋放鼠標時產生此消息

WM_NCPAINT

0x0085

當某個窗口的框架必須被繪制時,應用程序發送此消息給該窗口

WM_NCACTIVATE

0x0086

通過改變某個窗口的非客戶區來表示窗口是處於激活還是非激活狀態時,此消息被發送給該窗口

WM_NCMOUSEMOVE

0x00A0

當光標在窗口的非客戶區(窗口標題欄及邊框)內移動時發送此消息給該窗口

WM_NCLBUTTONDOWN

0x00A1

當光標在窗口的非客戶區並按下鼠標左鍵時發送此消息

WM_NCLBUTTONUP

0x00A2

當光標在窗口的非客戶區並釋放鼠標左鍵時發送此消息

WM_NCLBUTTONDBLCLK

0x00A3

當光標在窗口的非客戶區並雙擊鼠標左鍵時發送此消息

WM_NCRBUTTONDOWN

0x00A4

當光標在窗口的非客戶區並按下鼠標右鍵時發送此消息

WM_NCRBUTTONUP

0x00A5

當光標在窗口的非客戶區並釋放鼠標右鍵時發送此消息

WM_NCRBUTTONDBLCLK

0x00A6

當光標在窗口的非客戶區並雙擊鼠標右鍵時發送此消息

WM_NCMBUTTONDOWN

0x00A7

當光標在窗口的非客戶區並按下鼠標中鍵時發送此消息

WM_NCMBUTTONUP

0x00A8

當光標在窗口的非客戶區並釋放鼠標中鍵時發送此消息

WM_NCMBUTTONDBLCL

0x00A9

當光標在窗口的非客戶區並雙擊鼠標中鍵時發送此消息

WM_KEYDOWN

0x0100

按下一個非系統鍵(按下鍵時未按下“ALT”鍵)

WM_KEYUP

0x0101

釋放一個非系統鍵

WM_CHAR

0x0102

按下某鍵,當TranslateMessage()轉發WM_KEYDOWN后發送本消息

WM_DEADCHAR

0x0103

釋放某鍵,當TranslateMessage()轉發WM_KEYUP后發送本消息

WM_SYSKEYDOWN

0x0104

當按住ALT鍵同時按下其他鍵時發送此消息給擁有鍵盤焦點的窗口

WM_SYSKEYUP

0x0105

當釋放一個鍵同時按住ALT鍵時發送此消息給擁有鍵盤焦點的窗口

WM_SYSCHAR

0x0106

當TranslateMessage()轉發WM_SYSKEYDOWN后發送此消息給擁有鍵盤焦點的窗口

WM_SYSDEADCHAR

0x0107

當TranslateMessage()轉發WM_SYSKEYUP后發送此消息給擁有鍵盤焦點的窗口

WM_INITDIALOG

0x0110

在被顯示前發送此消息對話框,通常用此消息初始化控件和執行其他任務

WM_COMMAND

0x0111

選擇窗口菜單項或某個控件發送一條消息給它的父窗口或按下一個快捷鍵時產生此消息

WM_SYSCOMMAND

0x0112

選擇窗口菜單項或選擇最大化或最小化時,發送此消息給該窗口

WM_TIMER

0x0113

發生了定時器事件

WM_HSCROLL

0x0114

當窗口水平滾動條產生一個滾動事件時發送此消息給該窗口和滾動條的所有者

WM_VSCROLL

0x0115

當窗口垂直滾動條產生一個滾動事件時發送此消息給該窗口和滾動條的所有者

WM_INITMENU

0x0116

當一個菜單將要被激活時發送此消息,它發生在按下菜單項或按下菜單快捷鍵時,它允許程序在顯示前更改菜單

WM_INITMENUPOPUP

0x0117

當一個下拉菜單或子菜單將要被激活時發送此消息,它允許顯示前在修改菜單而不必更改整個菜單

WM_MENUSELECT

0x011F

選擇一條菜單項時發送此消息給菜單的所有者(一般是窗口)

WM_MENUCHAR

0x0120

當菜單已被激活且用戶按下了某個鍵(非快捷鍵),發送此消息給菜單的所有者

WM_ENTERIDLE

0x0121

當一個有模式對話框或菜單進入空閑狀態時發送此消息給它的所有者,空閑狀態指在處理完一條或幾條先前的消息后,消息列隊為空

WM_MENURBUTTONUP

0x0122

當光標位於菜單項上時,釋放鼠標右鍵產生此消息

WM_MENUDRAG

0x0123

當拖動菜單項時,發送此消息給拖放菜單的所有者

WM_MENUGETOBJECT

0x0124

當光標移入菜單項或者從菜單項中心移到菜單項頂部或底部時,發送此消息給拖放菜單的所有者

WM_UNINITMENUPOPUP

0x0125

當下拉菜單或者子菜單被銷毀時產生此消息

WM_MENUCOMMAND

0x0126

當用戶選擇菜單項時產生此消息

WM_CHANGEUISTATE

0x0127

應用程序發送此消息表明用戶界面(UI)狀態應當被改變

WM_UPDATEUISTATE

0x0128

應用程序發送此消息改變指定窗口及其子窗口的用戶界面(UI)狀態

WM_QUERYUISTATE

0x0129

應用程序發送此消息得到某個窗口的用戶界面(UI)狀態

WM_CTLCOLORMSGBOX

0x0132

繪制消息框前發送此消息給它的父窗口,通過響應這條消息,父窗口可以通過使用給定的相關顯示設備的句柄來設置消息框的文本和背景顏色

WM_CTLCOLOREDIT

0x0133

繪制編輯型控件前發送此消息給它的父窗口,可用來設置編輯框的文本和背景顏色

WM_CTLCOLORLISTBOX

0x0134

繪制列表框控件前發送此消息給它的父窗口,可用來設置編輯框的文本和背景顏色

WM_CTLCOLORBTN

0x0135

繪制按鈕控件前發送此消息給它的父窗口,可用來設置編輯框的文本和背景顏色

WM_CTLCOLORDLG

0x0136

繪制對話框前發送此消息給它的父窗口,可用來設置編輯框的文本和背景顏色

WM_CTLCOLORSCROLLBAR

0x0137

繪制滾動條控件前發送此消息給它的父窗口,可用來設置滾動條控件的文本和背景顏色

WM_CTLCOLORSTATIC

0x0138

繪制靜態控件前發送此消息給它的父窗口,可用來設置靜態控件的文本和背景顏色

WM_MOUSEMOVE

0x0200

鼠標移動

WM_LBUTTONDOWN

0x0201

按下鼠標左鍵

WM_LBUTTONUP

0x0202

釋放鼠標左鍵

WM_LBUTTONDBLCLK

0x0203

雙擊鼠標左鍵

WM_RBUTTONDOWN

0x0204

按下鼠標右鍵

WM_RBUTTONUP

0x0205

釋放鼠標右鍵

WM_RBUTTONDBLCLK

0x0206

雙擊鼠標右鍵

WM_MBUTTONDOWN

0x0207

按下鼠標中鍵

WM_MBUTTONUP

0x0208

釋放鼠標中鍵

WM_MBUTTONDBLCLK

0x0209

雙擊鼠標中鍵

WM_MOUSEWHEEL

0x020A

當鼠標滾輪轉動時發送此消息給當前獲得焦點的窗口

WM_PARENTNOTIFY

0x0210

當MDI子窗口被創建或被銷毀,或當光標位於子窗口上且用戶按了一下鼠標鍵時,發送此消息給它的父窗口

WM_ENTERMENULOOP

0x0211

發送此消息通知應用程序的主窗口進程已經進入了菜單模式循環

WM_EXITMENULOOP

0x0212

發送此消息通知應用程序的主窗口進程已經退出了菜單模式循環

WM_SIZING

0x0214

調整窗口大小時發送此消息給窗口,通過此消息應用程序可以監視或修改窗口大小和位置

WM_CAPTURECHANGED

0x0215

當窗口設定為不捕獲鼠標事件時,發送此消息給該窗口

WM_MOVING

0x0216

移動窗口時發送此消息給窗口,通過此消息應用程序可以監視或修改窗口大小和位置

WM_POWERBROADCAST

0x0218

發送此消息給應用程序通知它有關電源管理事件

WM_DEVICECHANGE

0x0219

當設備的硬件配置改變時發送此消息給應用程序或設備驅動程序

WM_MDICREATE

0x0220

應用程序發送此消息給多文檔的客戶窗口來創建一個MDI 子窗口

WM_MDIDESTROY

0x0221

應用程序發送此消息給多文檔的客戶窗口來關閉一個MDI 子窗口

WM_MDIACTIVATE

0x0222

應用程序發送此消息給多文檔的客戶窗口通知客戶窗口激活另一個MDI子窗口,當客戶窗口收到此消息后,它發出WM_MDIACTIVE消息給MDI子窗口(未激活)來激活它

WM_MDIRESTORE

0x0223

應用程序發送此消息給MDI客戶窗口通知子窗口恢復到原來大小

WM_MDINEXT

0x0224

應用程序發送此消息給MDI客戶窗口激活下一個或前一個窗口

WM_MDIMAXIMIZE

0x0225

應用程序發送此消息給MDI客戶窗口以最大化一個MDI子窗口

WM_MDITILE

0x0226

應用程序發送此消息給MDI客戶窗口以平鋪方式重新排列所有MDI子窗口

WM_MDICASCADE

0x0227

應用程序發送此消息給MDI客戶窗口以層疊方式重新排列所有MDI子窗口

WM_MDIICONARRANGE

0x0228

應用程序發送此消息給MDI客戶窗口重新排列所有最小化的MDI子窗口

WM_MDIGETACTIVE

0x0229

應用程序發送此消息給MDI客戶窗口以找到激活的子窗口的句柄

WM_MDISETMENU

0x0230

應用程序發送此消息給MDI客戶窗口用MDI菜單代替子窗口的菜單

WM_ENTERSIZEMOVE

0x0231

當窗口進入移動或改變大小模式循環時,發送此消息給該窗口

WM_EXITSIZEMOVE

0x0232

當窗口退出移動或改變大小模式循環時,發送此消息給該窗口

WM_DROPFILES

0x0233

當用戶在應用程序窗口中拖動某個文件時,產生此消息

WM_MDIREFRESHMENU

0x0234

應用程序發送此消息給MDI客戶窗口以刷新窗口菜單

WM_MOUSEHOVER

0x02A1

當光標在窗口客戶區懸停超過TrackMouseEvent()指定的時間時,發送此消息給該窗口

WM_MOUSELEAVE

0x02A3

當光標離開窗口客戶區超過TrackMouseEvent()指定的時間時,發送此消息給該窗口

WM_CUT

0x0300

應用程序發送此消息給一個編輯框或ComboBox以刪除當前選擇的文本

WM_COPY

0x0301

應用程序發送此消息給一個編輯框或ComboBox以復制當前選擇的文本到剪貼板

WM_PASTE 

0x0302

應用程序發送此消息給一個編輯框或ComboBox以從剪貼板中得到數據

WM_CLEAR

0x0303

應用程序發送此消息給一個編輯框或ComboBox以清除當前選擇的內容

WM_UNDO

0x0304

應用程序發送此消息給一個編輯框或ComboBox以撤消最后一次操作

WM_DESTROYCLIPBOARD

0x0307

當調用EmptyClipboard()清空剪貼板時,發送此消息給剪貼板所有者

WM_DRAWCLIPBOARD

0x0308

當剪貼板的內容變化時發送此消息給剪貼板觀察鏈中的第一個窗口,它允許用剪貼板觀察窗口來顯示剪貼板的新內容

WM_PAINTCLIPBOARD

0x0309

當剪貼板包含CF_OWNERDIPLAY格式的數據且剪貼板觀察窗口的客戶區需要重繪時,發送此消息給剪貼板所有者

WM_VSCROLLCLIPBOARD

0x030A

當剪貼板包含CF_OWNERDIPLAY格式的數據且剪貼板觀察窗口發生垂直滾動條事件時,剪貼板觀察窗口發送此消息給剪貼板所有者

WM_SIZECLIPBOARD

0x030B

當剪貼板包含CF_OWNERDIPLAY格式的數據且剪貼板觀察窗口的客戶區域的大小已經改變時,剪貼板觀察窗口發送此消息給剪貼板的所有者

WM_ASKCBFORMATNAME

0x030C

剪貼板觀察窗口發送此消息給剪貼板所有者以獲得CF_OWNERDISPLAY剪貼板格式的名字

WM_CHANGECBCHAIN

0x030D

當一個窗口從剪貼板觀察鏈中移去時發送此消息給剪貼板觀察鏈中的第一個窗口

WM_HSCROLLCLIPBOARD

0x030E

當剪貼板包含CF_OWNERDIPLAY格式的數據且剪貼板觀察窗口發生水平滾動條事件時,剪貼板觀察窗口發送此消息給剪貼板所有者

WM_QUERYNEWPALETTE

0x030F

發送此消息給將要獲得鍵盤焦點的窗口,此消息使窗口在獲得焦點時同時有機會實現它的邏輯調色板

WM_PALETTEISCHANGING

0x0310

應用程序將要實現它的邏輯調色板時發送此消息通知所有應用程序

WM_PALETTECHANGED

0x0311

獲得焦點的窗口實現它的邏輯調色板后發送此消息給所有頂級並重疊的窗口,以此

來改變系統調色板

WM_HOTKEY

0x0312

當用戶按下由RegisterHotKey()注冊的熱鍵時產生此消息

WM_PRINT

0x0317

應用程序發送此消息給窗口,要求窗口在指定設備環境中繪制自己,一般情況下是打印機設備環境

WM_PRINTCLIENT

0x0318

應用程序發送此消息給窗口,要求窗口在指定設備環境中繪制窗口客戶區,一般情況下是打印機設備環境

WM_APP

0x8000

幫助用戶自定義消息,自定義消息可以為WM_APP+X,X為正整數

WM_USER

0x0400

幫助用戶自定義消息,自定義消息可以為WM_USER+X,X為正整數

  表A-3  通知消息-按鈕

消息名稱

說 明

BN_CLICKED

單擊按鈕

BN_DISABLE

按鈕被禁止

BN_DOUBLECLICKED

雙擊按鈕

BN_HILITE

加亮按鈕

BN_PAINT

按鈕應當重畫

BN_UNHILITE

加亮應當去掉

表A-4  通知消息-組合框

消息名稱

說 明

CBN_CLOSEUP

組合框的列表框被關閉

CBN_DBLCLK

用戶雙擊了一個字符串

CBN_DROPDOWN

組合框的列表框被拉下

CBN_EDITCHANGE

用戶修改了組合框中的文本

CBN_EDITUPDATE

組合框內的文本即將更新

CBN_ERRSPACE

組合框內存不足

CBN_KILLFOCUS

組合框失去輸入焦點

CBN_SELCHANGE

在組合框中選擇了一項

CBN_SELENDCANCEL

用戶的選擇將被忽略

CBN_SELENDOK

用戶的選擇將被執行

CBN_SETFOCUS

組合框獲得輸入焦點

表A-5  通知消息-編輯框

消息名稱

說 明

EN_CHANGE

編輯框中的文本己更新

EN_ERRSPACE

編輯框內存不足

EN_HSCROLL

用戶點擊了水平滾動條

EN_KILLFOCUS

編輯框失去輸入焦點

EN_MAXTEXT

插入的內容被截斷

EN_SETFOCUS

編輯框獲得輸入焦點

EN_UPDATE

編輯框中的文本將要更新

EN_VSCROLL

用戶點擊了垂直滾動條

表A-6  通知消息-列表框

消息名稱

說 明

LBN_DBLCLK

用戶雙擊了一項

LBN_ERRSPACE

列表框內存不足

LBN_KILLFOCUS

列表框正在失去輸入焦點

LBN_SELCANCEL

用戶選擇被取消

LBN_SELCHANGE

用戶選擇將改變

LBN_SETFOCUS

列表框獲得輸入焦點

Windows消息大全

 

  Windows是一消息(Message)驅動式系統,Windows消息提供了應用程序與應用程序之間、應用程序與Windows系統之間進行通訊的手段。應用程序要實現的功能由消息來觸發,並靠對消息的響應和處理來完成。Windows系統中有兩種消息隊列,一種是系統消息隊列,另一種是應用程序消息隊列。計算機的所有輸入設備由 Windows監控,當一個事件發生時,Windows先將輸入的消息放入系統消息隊列中,然后再將輸入的消息拷貝到相應的應用程序隊列中,應用程序中的消息循環從它的消息隊列中檢索每一個消息並發送給相應的窗口函數中。一個事件的發生,到達處理它的窗口函數必須經歷上述過程。值得注意的是消息的非搶先性,即不論事件的急與緩,總是按到達的先后排隊(一些系統消息除外),這就使得一些外部實時事件可能得不到及時的處理。

 

  由於Windows本身是由消息驅動的,舉一個例子來說明這個問題。打開記事本程序,該程序有一個File菜單,那么,在運行該應用程序的時候,如果用戶單擊了File菜單里New命令時,這個動作將被Windows (而不是應用程序本身!)所捕獲,Windows經過分析得知這個動作應該由上面所說的那個應用程序去處理,既然是這樣,Windows就發送了個叫做WM_COMMAND的消息給應用程序,該消息所包含信息告訴應用程序:"用戶單擊了New菜單",應用程序得知這一消息之后,采取相應的動作來響應它,這個過程稱為消息處理。Windows為每一個應用程序(確切地說是每一個線程)維護了相應的消息隊列,應用程序的任務就是不停的從它的消息隊列中獲取消息,分析消息和處理消息,直到一條接到叫做WM_QUIT消息為止,這個過程通常是由一種叫做消息循環的程序結構來實現的。

 

  消息本身是作為一個記錄傳遞給應用程序的,這個記錄中包含了消息的類型以及其他信息。例如,對於單擊鼠標所產生的消息來說,這個記錄中包含了單擊鼠標時的坐標。這個記錄類型叫做T M s g,它在Wi n d o w s單元中是這樣聲明的:

 

type

TMsg = packedrecord

hwnd: HWND / /窗口句柄

message: UINT / /消息常量標識符

wParam: WPA R AM  // 32位消息的特定附加信息

lParam: LPA R AM  // 32位消息的特定附加信息

time: DWORD / /消息創建時的時間

pt: TPoint / /消息創建時的鼠標位置

end

 

消息中有什么?

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

hwnd 32位的窗口句柄。窗口可以是任何類型的屏幕對象,因為Win32能夠維護大多數可視對象的句柄(窗口、對話框、按鈕、編輯框等)。

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

wParam 通常是一個與消息有關的常量值,也可能是窗口或控件的句柄。

lParam 通常是一個指向內存中數據的指針。由於WParm、lParam和Pointer都是32位的,因此,它們之間可以相互轉換。

 

WM_NULL = 0

WM_CREATE = 1

應用程序創建一個窗口

WM_DESTROY = 2

一個窗口被銷毀

WM_MOVE = 3

移動一個窗口

WM_SIZE = 5

改變一個窗口的大小

WM_ACTIVATE = 6

一個窗口被激活或失去激活狀態;

WM_SETFOCUS = 7

獲得焦點后

WM_KILLFOCUS = 8

失去焦點

WM_ENABLE = 10

改變enable狀態

WM_SETREDRAW = 11

設置窗口是否能重畫

WM_SETTEXT = 12

應用程序發送此消息來設置一個窗口的文本

WM_GETTEXT = 13

應用程序發送此消息來復制對應窗口的文本到緩沖區

WM_GETTEXTLENGTH =14

得到與一個窗口有關的文本的長度(不包含空字符)

WM_PAINT = 15

要求一個窗口重畫自己

WM_CLOSE = 16

當一個窗口或應用程序要關閉時發送一個信號

WM_QUERYENDSESSION= 17

當用戶選擇結束對話框或程序自己調用ExitWindows函數

WM_QUIT = 18

用來結束程序運行或當程序調用postquitmessage函數

WM_QUERYOPEN = 19

當用戶窗口恢復以前的大小位置時,把此消息發送給某個圖標

WM_ERASEBKGND = 20

當窗口背景必須被擦除時(例在窗口改變大小時)

WM_SYSCOLORCHANGE =21

當系統顏色改變時,發送此消息給所有頂級窗口

WM_ENDSESSION = 22

當系統進程發出WM_QUERYENDSESSION消息后,此消息發送給應用程序,

通知它對話是否結束

WM_SYSTEMERROR = 23

WM_SHOWWINDOW = 24

當隱藏或顯示窗口是發送此消息給這個窗口

WM_ACTIVATEAPP = 28

發此消息給應用程序哪個窗口是激活的,哪個是非激活的;

WM_FONTCHANGE = 29

當系統的字體資源庫變化時發送此消息給所有頂級窗口

WM_TIMECHANGE = 30

當系統的時間變化時發送此消息給所有頂級窗口

WM_CANCELMODE = 31

發送此消息來取消某種正在進行的摸態(操作)

WM_SETCURSOR = 32

如果鼠標引起光標在某個窗口中移動且鼠標輸入沒有被捕獲時,就發消息給某個窗口

WM_MOUSEACTIVATE =33

當光標在某個非激活的窗口中而用戶正按着鼠標的某個鍵發送此消息給當前窗口

WM_CHILDACTIVATE =34

發送此消息給MDI子窗口當用戶點擊此窗口的標題欄,或當窗口被激活,移動,改變大小

WM_QUEUESYNC = 35

此消息由基於計算機的訓練程序發送,通過WH_JOURNALPALYBACK的hook程序

分離出用戶輸入消息

WM_GETMINMAXINFO =36

此消息發送給窗口當它將要改變大小或位置;

WM_PAINTICON = 38

發送給最小化窗口當它圖標將要被重畫

WM_ICONERASEBKGND =39

此消息發送給某個最小化窗口,僅當它在畫圖標前它的背景必須被重畫

WM_NEXTDLGCTL = 40

發送此消息給一個對話框程序去更改焦點位置

WM_SPOOLERSTATUS =42

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

WM_DRAWITEM = 43

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

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

WM_MEASUREITEM = 44

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

發送此消息給控件的所有者

WM_DELETEITEM = 45

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

WM_VKEYTOITEM = 46

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

WM_CHARTOITEM = 47

此消息由一個LBS_WANTKEYBOARDINPUT風格的列表框發送給他的所有者來響應WM_CHAR消息

WM_SETFONT = 48

當繪制文本時程序發送此消息得到控件要用的顏色

WM_GETFONT = 49

應用程序發送此消息得到當前控件繪制文本的字體

WM_SETHOTKEY = 50

應用程序發送此消息讓一個窗口與一個熱鍵相關連

WM_GETHOTKEY = 51

應用程序發送此消息來判斷熱鍵與某個窗口是否有關聯

WM_QUERYDRAGICON =55

此消息發送給最小化窗口,當此窗口將要被拖放而它的類中沒有定義圖標,應用程序能

返回一個圖標或光標的句柄,當用戶拖放圖標時系統顯示這個圖標或光標

WM_COMPAREITEM = 57

發送此消息來判定combobox或listbox新增加的項的相對位置

WM_GETOBJECT = 61

WM_COMPACTING = 65

顯示內存已經很少了

WM_WINDOWPOSCHANGING= 70

發送此消息給那個窗口的大小和位置將要被改變時,來調用setwindowpos函數或其它窗口管理函數

WM_WINDOWPOSCHANGED= 71

發送此消息給那個窗口的大小和位置已經被改變時,來調用setwindowpos函數或其它窗口管理函數

WM_POWER = 72(適用於16位的windows)

當系統將要進入暫停狀態時發送此消息

WM_COPYDATA = 74

當一個應用程序傳遞數據給另一個應用程序時發送此消息

WM_CANCELJOURNAL =75

當某個用戶取消程序日志激活狀態,提交此消息給程序

WM_NOTIFY = 78

當某個控件的某個事件已經發生或這個控件需要得到一些信息時,發送此消息給它的父窗口

WM_INPUTLANGCHANGEREQUEST= 80

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

WM_INPUTLANGCHANGE= 81

當平台現場已經被改變后發送此消息給受影響的最頂級窗口

WM_TCARD = 82

當程序已經初始化windows幫助例程時發送此消息給應用程序

WM_HELP = 83

此消息顯示用戶按下了F1,如果某個菜單是激活的,就發送此消息個此窗口關聯的菜單,否則就

發送給有焦點的窗口,如果當前都沒有焦點,就把此消息發送給當前激活的窗口

WM_USERCHANGED = 84

當用戶已經登入或退出后發送此消息給所有的窗口,當用戶登入或退出時系統更新用戶的具體

設置信息,在用戶更新設置時系統馬上發送此消息;

WM_NOTIFYFORMAT =85

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

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

WM_CONTEXTMENU =123

當用戶某個窗口中點擊了一下右鍵就發送此消息給這個窗口

WM_STYLECHANGING =124

當調用SETWINDOWLONG函數將要改變一個或多個 窗口的風格時發送此消息給那個窗口

WM_STYLECHANGED =125

當調用SETWINDOWLONG函數一個或多個 窗口的風格后發送此消息給那個窗口

WM_DISPLAYCHANGE =126

當顯示器的分辨率改變后發送此消息給所有的窗口

WM_GETICON = 127

此消息發送給某個窗口來返回與某個窗口有關連的大圖標或小圖標的句柄;

WM_SETICON = 128

程序發送此消息讓一個新的大圖標或小圖標與某個窗口關聯;

WM_NCCREATE = 129

當某個窗口第一次被創建時,此消息在WM_CREATE消息發送前發送;

WM_NCDESTROY = 130

此消息通知某個窗口,非客戶區正在銷毀

WM_NCCALCSIZE = 131

當某個窗口的客戶區域必須被核算時發送此消息

WM_NCHITTEST =132//移動鼠標,按住或釋放鼠標時發生

WM_NCPAINT = 133

程序發送此消息給某個窗口當它(窗口)的框架必須被繪制時;

WM_NCACTIVATE = 134

此消息發送給某個窗口僅當它的非客戶區需要被改變來顯示是激活還是非激活狀態;

WM_GETDLGCODE = 135

發送此消息給某個與對話框程序關聯的控件,widdows控制方位鍵和TAB鍵使輸入進入此控件

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

WM_NCMOUSEMOVE =160

當光標在一個窗口的非客戶區內移動時發送此消息給這個窗口 //非客戶區為:窗體的標題欄及窗

的邊框體

WM_NCLBUTTONDOWN =161

當光標在一個窗口的非客戶區同時按下鼠標左鍵時提交此消息

WM_NCLBUTTONUP =162

當用戶釋放鼠標左鍵同時光標某個窗口在非客戶區十發送此消息;

WM_NCLBUTTONDBLCLK= 163

當用戶雙擊鼠標左鍵同時光標某個窗口在非客戶區十發送此消息

WM_NCRBUTTONDOWN =164

當用戶按下鼠標右鍵同時光標又在窗口的非客戶區時發送此消息

WM_NCRBUTTONUP =165

當用戶釋放鼠標右鍵同時光標又在窗口的非客戶區時發送此消息

WM_NCRBUTTONDBLCLK= 166

當用戶雙擊鼠標右鍵同時光標某個窗口在非客戶區十發送此消息

WM_NCMBUTTONDOWN =167

當用戶按下鼠標中鍵同時光標又在窗口的非客戶區時發送此消息

WM_NCMBUTTONUP =168

當用戶釋放鼠標中鍵同時光標又在窗口的非客戶區時發送此消息

WM_NCMBUTTONDBLCLK= 169

當用戶雙擊鼠標中鍵同時光標又在窗口的非客戶區時發送此消息

WM_KEYFIRST = 256

WM_KEYDOWN = 256

//按下一個鍵

WM_KEYUP = 257

//釋放一個鍵

WM_CHAR = 258

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

WM_DEADCHAR = 259

當用translatemessage函數翻譯WM_KEYUP消息時發送此消息給擁有焦點的窗口

WM_SYSKEYDOWN = 260

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

WM_SYSKEYUP = 261

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

WM_SYSCHAR = 262

當WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函數翻譯后提交此消息給擁有焦點的窗口

WM_SYSDEADCHAR =263

當WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函數翻譯后發送此消息給擁有焦點的窗口

WM_KEYLAST = 264

WM_INITDIALOG = 272

在一個對話框程序被顯示前發送此消息給它,通常用此消息初始化控件和執行其它任務

WM_COMMAND = 273

當用戶選擇一條菜單命令項或當某個控件發送一條消息給它的父窗口,一個快捷鍵被翻譯

WM_SYSCOMMAND = 274

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

WM_TIMER = 275 //發生了定時器事件

WM_HSCROLL = 276

當一個窗口標准水平滾動條產生一個滾動事件時發送此消息給那個窗口,也發送給擁有它的控件

WM_VSCROLL = 277

當一個窗口標准垂直滾動條產生一個滾動事件時發送此消息給那個窗口也,發送給擁有它的控件 WM_INITMENU = 278

當一個菜單將要被激活時發送此消息,它發生在用戶菜單條中的某項或按下某個菜單鍵,它允許

程序在顯示前更改菜單

WM_INITMENUPOPUP =279

當一個下拉菜單或子菜單將要被激活時發送此消息,它允許程序在它顯示前更改菜單,而不要

改變全部

WM_MENUSELECT = 287

當用戶選擇一條菜單項時發送此消息給菜單的所有者(一般是窗口)

WM_MENUCHAR = 288

當菜單已被激活用戶按下了某個鍵(不同於加速鍵),發送此消息給菜單的所有者;

WM_ENTERIDLE = 289

當一個模態對話框或菜單進入空載狀態時發送此消息給它的所有者,一個模態對話框或菜單進入空載狀態就是在處理完一條或幾條先前的消息后沒有消息它的列隊中等待

WM_MENURBUTTONUP =290

WM_MENUDRAG = 291

WM_MENUGETOBJECT =292

WM_UNINITMENUPOPUP= 293

WM_MENUCOMMAND =294

WM_CHANGEUISTATE =295

WM_UPDATEUISTATE =296

WM_QUERYUISTATE =297

WM_CTLCOLORMSGBOX =306

在windows繪制消息框前發送此消息給消息框的所有者窗口,通過響應這條消息,所有者窗口可以

通過使用給定的相關顯示設備的句柄來設置消息框的文本和背景顏色

WM_CTLCOLOREDIT =307

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

通過使用給定的相關顯示設備的句柄來設置編輯框的文本和背景顏色

WM_CTLCOLORLISTBOX= 308

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

通過使用給定的相關顯示設備的句柄來設置列表框的文本和背景顏色

WM_CTLCOLORBTN =309

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

通過使用給定的相關顯示設備的句柄來設置按紐的文本和背景顏色

WM_CTLCOLORDLG =310

當一個對話框控件將要被繪制前發送此消息給它的父窗口;通過響應這條消息,所有者窗口可以

通過使用給定的相關顯示設備的句柄來設置對話框的文本背景顏色

WM_CTLCOLORSCROLLBAR=311

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

通過使用給定的相關顯示設備的句柄來設置滾動條的背景顏色

WM_CTLCOLORSTATIC =312

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

通過使用給定的相關顯示設備的句柄來設置靜態控件的文本和背景顏色

WM_MOUSEFIRST = 512

WM_MOUSEMOVE = 512

// 移動鼠標

WM_LBUTTONDOWN =513

//按下鼠標左鍵

WM_LBUTTONUP = 514

//釋放鼠標左鍵

WM_LBUTTONDBLCLK =515

//雙擊鼠標左鍵

WM_RBUTTONDOWN =516

//按下鼠標右鍵

WM_RBUTTONUP = 517

//釋放鼠標右鍵

WM_RBUTTONDBLCLK =518

//雙擊鼠標右鍵

WM_MBUTTONDOWN =519

//按下鼠標中鍵

WM_MBUTTONUP = 520

//釋放鼠標中鍵

WM_MBUTTONDBLCLK =521

//雙擊鼠標中鍵

WM_MOUSEWHEEL = 522

當鼠標輪子轉動時發送此消息個當前有焦點的控件

WM_MOUSELAST = 522

WM_PARENTNOTIFY =528

當MDI子窗口被創建或被銷毀,或用戶按了一下鼠標鍵而光標在子窗口上時發送此消息給它的父窗口

WM_ENTERMENULOOP =529

發送此消息通知應用程序的主窗口that已經進入了菜單循環模式

WM_EXITMENULOOP =530

發送此消息通知應用程序的主窗口that已退出了菜單循環模式

WM_NEXTMENU = 531

WM_SIZING = 532

當用戶正在調整窗口大小時發送此消息給窗口;通過此消息應用程序可以監視窗口大小和位置

也可以修改他們

WM_CAPTURECHANGED =533

發送此消息給窗口當它失去捕獲的鼠標時;

WM_MOVING = 534

當用戶在移動窗口時發送此消息,通過此消息應用程序可以監視窗口大小和位置

也可以修改他們;

WM_POWERBROADCAST =536

此消息發送給應用程序來通知它有關電源管理事件;

WM_DEVICECHANGE =537

當設備的硬件配置改變時發送此消息給應用程序或設備驅動程序

WM_IME_STARTCOMPOSITION= 269

WM_IME_ENDCOMPOSITION= 270

WM_IME_COMPOSITION= 271

WM_IME_KEYLAST =271

WM_IME_SETCONTEXT =641

WM_IME_NOTIFY = 642

WM_IME_CONTROL =643

WM_IME_COMPOSITIONFULL= 644

WM_IME_SELECT = 645

WM_IME_CHAR = 646

WM_IME_REQUEST =648

WM_IME_KEYDOWN =656

WM_IME_KEYUP = 657

WM_MDICREATE = 544

應用程序發送此消息給多文檔的客戶窗口來創建一個MDI 子窗口

WM_MDIDESTROY = 545

應用程序發送此消息給多文檔的客戶窗口來關閉一個MDI 子窗口

WM_MDIACTIVATE =546

應用程序發送此消息給多文檔的客戶窗口通知客戶窗口激活另一個MDI子窗口,當客戶窗口收到

此消息后,它發出WM_MDIACTIVE消息給MDI子窗口(未激活)激活它;

WM_MDIRESTORE = 547

程序發送此消息給MDI客戶窗口讓子窗口從最大最小化恢復到原來大小

WM_MDINEXT = 548

程序發送此消息給MDI客戶窗口激活下一個或前一個窗口

WM_MDIMAXIMIZE =549

程序發送此消息給MDI客戶窗口來最大化一個MDI子窗口;

WM_MDITILE = 550

程序發送此消息給MDI客戶窗口以平鋪方式重新排列所有MDI子窗口

WM_MDICASCADE = 551

程序發送此消息給MDI客戶窗口以層疊方式重新排列所有MDI子窗口

WM_MDIICONARRANGE =552

程序發送此消息給MDI客戶窗口重新排列所有最小化的MDI子窗口

WM_MDIGETACTIVE =553

程序發送此消息給MDI客戶窗口來找到激活的子窗口的句柄

WM_MDISETMENU = 560

程序發送此消息給MDI客戶窗口用MDI菜單代替子窗口的菜單

WM_ENTERSIZEMOVE =561

WM_EXITSIZEMOVE =562

WM_DROPFILES = 563

WM_MDIREFRESHMENU =564

WM_MOUSEHOVER = 673

WM_MOUSELEAVE = 675

WM_CUT = 768

程序發送此消息給一個編輯框或combobox來刪除當前選擇的文本

WM_COPY = 769

程序發送此消息給一個編輯框或combobox來復制當前選擇的文本到剪貼板

WM_PASTE = 770

程序發送此消息給editcontrol或combobox從剪貼板中得到數據

WM_CLEAR = 771

程序發送此消息給editcontrol或combobox清除當前選擇的內容;

WM_UNDO = 772

程序發送此消息給editcontrol或combobox撤消最后一次操作

WM_RENDERFORMAT =773

WM_DESTROYCLIPBOARD= 775

當調用ENPTYCLIPBOARD函數時 發送此消息給剪貼板的所有者

WM_DRAWCLIPBOARD =776

當剪貼板的內容變化時發送此消息給剪貼板觀察鏈的第一個窗口;它允許用剪貼板觀察窗口來

顯示剪貼板的新內容;

WM_PAINTCLIPBOARD =777

當剪貼板包含CF_OWNERDIPLAY格式的數據並且剪貼板觀察窗口的客戶區需要重畫;

WM_VSCROLLCLIPBOARD= 778

WM_SIZECLIPBOARD =779

當剪貼板包含CF_OWNERDIPLAY格式的數據並且剪貼板觀察窗口的客戶區域的大小已經改變是此消息通過剪貼板觀察窗口發送給剪貼板的所有者;

WM_ASKCBFORMATNAME= 780

通過剪貼板觀察窗口發送此消息給剪貼板的所有者來請求一個CF_OWNERDISPLAY格式的剪貼板的名字

WM_CHANGECBCHAIN =781

當一個窗口從剪貼板觀察鏈中移去時發送此消息給剪貼板觀察鏈的第一個窗口;

WM_HSCROLLCLIPBOARD= 782

此消息通過一個剪貼板觀察窗口發送給剪貼板的所有者;它發生在當剪貼板包含CFOWNERDISPALY格式的數據並且有個事件在剪貼板觀察窗的水平滾動條上;所有者應滾動剪貼板圖象並更新滾動條的值;

WM_QUERYNEWPALETTE= 783

此消息發送給將要收到焦點的窗口,此消息能使窗口在收到焦點時同時有機會實現他的邏輯調色板

WM_PALETTEISCHANGING=784

當一個應用程序正要實現它的邏輯調色板時發此消息通知所有的應用程序

WM_PALETTECHANGED =785

此消息在一個擁有焦點的窗口實現它的邏輯調色板后發送此消息給所有頂級並重疊的窗口,以此

來改變系統調色板

WM_HOTKEY = 786

當用戶按下由REGISTERHOTKEY函數注冊的熱鍵時提交此消息

WM_PRINT = 791

應用程序發送此消息僅當WINDOWS或其它應用程序發出一個請求要求繪制一個應用程序的一部分;

WM_PRINTCLIENT =792

WM_HANDHELDFIRST =856

WM_HANDHELDLAST =863

WM_PENWINFIRST =896

WM_PENWINLAST = 911

WM_COALESCE_FIRST =912

WM_COALESCE_LAST =927

WM_DDE_FIRST = 992

WM_DDE_INITIATE =WM_DDE_FIRST + 0

一個DDE客戶程序提交此消息開始一個與服務器程序的會話來響應那個指定的程序和主題名;

WM_DDE_TERMINATE =WM_DDE_FIRST + 1

一個DDE應用程序(無論是客戶還是服務器)提交此消息來終止一個會話;

WM_DDE_ADVISE =WM_DDE_FIRST + 2

一個DDE客戶程序提交此消息給一個DDE服務程序來請求服務器每當數據項改變時更新它

WM_DDE_UNADVISE =WM_DDE_FIRST + 3

一個DDE客戶程序通過此消息通知一個DDE服務程序不更新指定的項或一個特殊的剪貼板格式的項

WM_DDE_ACK = WM_DDE_FIRST+ 4

此消息通知一個DDE(動態數據交換)程序已收到並正在處理WM_DDE_POKE, WM_DDE_EXECUTE, WM_DDE_DATA, WM_DDE_ADVISE,WM_DDE_UNADVISE, or WM_DDE_INITIAT消息

WM_DDE_DATA =WM_DDE_FIRST + 5

一個DDE服務程序提交此消息給DDE客戶程序來傳遞個一數據項給客戶或通知客戶的一條可用數據項

WM_DDE_REQUEST =WM_DDE_FIRST + 6

一個DDE客戶程序提交此消息給一個DDE服務程序來請求一個數據項的值;

WM_DDE_POKE =WM_DDE_FIRST + 7

一個DDE客戶程序提交此消息給一個DDE服務程序,客戶使用此消息來請求服務器接收一個未經同意的數據項;服務器通過答復WM_DDE_ACK消息提示是否它接收這個數據項;

WM_DDE_EXECUTE =WM_DDE_FIRST + 8

一個DDE客戶程序提交此消息給一個DDE服務程序來發送一個字符串給服務器讓它象串行命令一樣被處理,服務器通過提交WM_DDE_ACK消息來作回應;

WM_DDE_LAST =WM_DDE_FIRST + 8

WM_APP = 32768

WM_USER = 1024

此消息能幫助應用程序自定義私有消息;

/////////////////////////////////////////////////////////////////////

通知消息(Notification message)是指這樣一種消息,一個窗口內的子控件發生了一些事情,需要通

知父窗口。通知消息只適用於標准的窗口控件如按鈕、列表框、組合框、編輯框,以及Windows 95公

共控件如樹狀視圖、列表視圖等。例如,單擊或雙擊一個控件、在控件中選擇部分文本、操作控件的

滾動條都會產生通知消息。

按扭

B N _ C L I C K E D//用戶單擊了按鈕

B N _ D I S A B L E//按鈕被禁止

B N _ D O U B L E CL I C K E D //用戶雙擊了按鈕

B N _ H I L I T E//用戶加亮了按鈕

B N _ PA I N T按鈕應當重畫

B N _ U N H I L I TE加亮應當去掉

組合框

C B N _ C L O S E UP組合框的列表框被關閉

C B N _ D B L C L K用戶雙擊了一個字符串

C B N _ D R O P D OW N組合框的列表框被拉出

C B N _ E D I T C HA N G E用戶修改了編輯框中的文本

C B N _ E D I T U PD AT E編輯框內的文本即將更新

C B N _ E R R S PAC E組合框內存不足

C B N _ K I L L F OC U S組合框失去輸入焦點

C B N _ S E L C H AN G E在組合框中選擇了一項

C B N _ S E L E N DC A N C E L用戶的選擇應當被取消

C B N _ S E L E N DO K用戶的選擇是合法的

C B N _ S E T F O CU S組合框獲得輸入焦點

編輯框

E N _ C H A N G E編輯框中的文本己更新

E N _ E R R S PA CE編輯框內存不足

E N _ H S C R O L L用戶點擊了水平滾動條

E N _ K I L L F O CU S編輯框正在失去輸入焦點

E N _ M A X T E X T插入的內容被截斷

E N _ S E T F O C US編輯框獲得輸入焦點

E N _ U P D AT E編輯框中的文本將要更新

E N _ V S C R O L L用戶點擊了垂直滾動條消息含義

列表框

L B N _ D B L C L K用戶雙擊了一項

L B N _ E R R S PAC E列表框內存不夠

L B N _ K I L L F OC U S列表框正在失去輸入焦點

L B N _ S E L C A NC E L選擇被取消

L B N _ S E L C H AN G E選擇了另一項

L B N _ S E T F O CU S列表框獲得輸入焦點

 

 

 

1. 移動控件

 

控件.發送信息 (274,61458, 0) 其中參數1的值自61457---61471都可用,結果是一樣的,都是移動控件。還有一個大家都熟,就是控件.發送信息 (161, 2, 0)

 

2.調整控件尺寸

 

控件.發送信息 (274,61441, 0) (274,61442,0) (274,61443,0) (274,61444,0) (274,61445,0) (274,61446,0)(274,61447,0) (274,61448,0)

 

分別對應調整控件的左寬度右寬度 頂高度 西北角 東北角 底寬度 西南角 東北角的尺寸。

 

此外,控件.發送信息(161,10,0) (161,11,0) (161,12,0) (161,13,0) (161,14,0) (161,15,0) (161,16,0) (161,16,0)

 

也是分別對應調整控件的左寬度右寬度 頂高度 西北角 東北角 底寬度 西南角 東北角的尺寸。

 

3。控件最大化

 

控件.發送信息 (274,61450, 0)其中參數1的值自61488---61503都可用,結果是一樣的。

 

4。控件最小化

 

控件.發送信息 (274,61473, 0)其中參數1的值自61472---61487都可用,結果是一樣的。

 

5。馬上啟動屏幕保護(如果電腦里沒設置屏幕保護本信息不起作用)

 

發送信息 (274, 61760, 0)其中參數1的值自61760---61776都可用,結果是一樣的。

 

6.出對話框--15秒進入待機(win98下可用,winXP無效,其他未試)

 

控件.發送信息 (274,61840, 0)其中參數1的值自61840---61854都可用,結果是一樣的。

 

7。擊控件后鼠標帶問號,再擊后消失。

 

控件.發送信息 (274,61836, 0)

 

8。關閉窗口

 

控件.發送信息 (16, 0,0)

 

9。發送控件鼠標左鍵被按下的信息

 

控件.發送信息 (513, 0,0)

 

10。發送控件鼠標左鍵被放開的信息

 

控件.發送信息 (514, 0,0)

 

11。清除窗口的標題

 

控件.發送信息 (12, 0,0)

 

以下是易記事本里的:

 

12。復制

 

編輯框.發送信息 (769, 0,0)

 

13。粘帖

 

編輯框.發送信息 (770, 0,0)

 

14。全選

 

編輯框.發送信息 (177, 0,-1)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM