VB API SendMessage之wMsg (二)
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 子視窗
WM_MDIACTIVATE = $0222;
應用程式發送此訊息給多文檔的客戶視窗通知客戶視窗啟用另一個MDI子視窗,當客戶視窗收到此訊息後,它發出WM_MDIACTIVE訊息給MDI子視窗(未啟用)啟用它;
WM_MDIRESTORE = $0223;
程式 發送此訊息給MDI客戶視窗讓子視窗從最大最小化恢複到原來大小
WM_MDINEXT = $0224;
程式 發送此訊息給MDI客戶視窗啟用下一個或前一個視窗
WM_MDIMAXIMIZE = $0225;
程式發送此訊息給MDI客戶視窗來最大化一個MDI子視窗;
WM_MDITILE = $0226;
程式 發送此訊息給MDI客戶視窗以平鋪方式重新排列所有MDI子視窗
WM_MDICASCADE = $0227;
程式 發送此訊息給MDI客戶視窗以層疊方式重新排列所有MDI子視窗
WM_MDIICONARRANGE = $0228;
程式 發送此訊息給MDI客戶視窗重新排列所有最小化的MDI子視窗
WM_MDIGETACTIVE = $0229;
程式 發送此訊息給MDI客戶視窗來找到啟用的子視窗的控制代碼
WM_MDISETMENU = $0230;
程式 發送此訊息給MDI客戶視窗用MDI菜單代替子視窗的菜單
WM_ENTERSIZEMOVE = $0231;
WM_EXITSIZEMOVE = $0232;
WM_DROPFILES = $0233;
WM_MDIREFRESHMENU = $0234;
WM_MOUSEHOVER = $02A1;
WM_MOUSELEAVE = $02A3;
WM_CUT = $0300;
程式發送此訊息給一個編輯框或combobox來刪除當前選擇的文本
WM_COPY = $0301;
程式發送此訊息給一個編輯框或combobox來複製當前選擇的文本到剪貼簿
WM_PASTE = $0302;
程式發送此訊息給editcontrol或combobox從剪貼簿中得到資料
WM_CLEAR = $0303;
程式發送此訊息給editcontrol或combobox清除當前選擇的內容;
WM_UNDO = $0304;
程式發送此訊息給editcontrol或combobox撤消最後一次操作
WM_RENDERFORMAT = $0305;
WM_RENDERALLFORMATS = $0306;
WM_DESTROYCLIPBOARD = $0307;
當調用ENPTYCLIPBOARD函數時 發送此訊息給剪貼簿的所有者
WM_DRAWCLIPBOARD = $0308;
當剪貼簿的內容變化時發送此訊息給剪貼簿觀察鏈的第一個視窗;它允許用剪貼簿觀察視窗來
顯示剪貼簿的新內容;
WM_PAINTCLIPBOARD = $0309;
當剪貼簿包含CF_OWNERDIPLAY格式的資料並且剪貼簿觀察視窗的客戶區需要重畫;
WM_VSCROLLCLIPBOARD = $030A;
WM_SIZECLIPBOARD = $030B;
當剪貼簿包含CF_OWNERDIPLAY格式的資料並且剪貼簿觀察視窗的用戶端區域的大小已經改變是此訊息通過剪貼簿觀察視窗發送給剪貼簿的所有者;
WM_ASKCBFORMATNAME = $030C;
通過剪貼簿觀察視窗發送此訊息給剪貼簿的所有者來請求一個CF_OWNERDISPLAY格式的剪貼簿的名字
WM_CHANGECBCHAIN = $030D;
當一個視窗從剪貼簿觀察鏈中移去時發送此訊息給剪貼簿觀察鏈的第一個視窗;
WM_HSCROLLCLIPBOARD = $030E;
此訊息通過一個剪貼簿觀察視窗發送給剪貼簿的所有者 ;它發生在當剪貼簿包含CFOWNERDISPALY格式的資料並且有個事件在剪貼簿觀察窗的水平捲軸上;所有者應滾動剪貼簿圖象並更新捲軸的值;
WM_QUERYNEWPALETTE = $030F;
此訊息發送給將要收到焦點的視窗,此訊息能使視窗在收到焦點時同時有機會實現他的邏輯調色盤
WM_PALETTEISCHANGING= $0310;
當一個應用程式正要實現它的邏輯調色盤時發此訊息通知所有的應用程式
WM_PALETTECHANGED = $0311;
此訊息在一個擁有焦點的視窗實現它的邏輯調色盤後發送此訊息給所有頂級並重疊的視窗,以此來改變系統調色盤
WM_HOTKEY = $0312;
當使用者按下由REGISTERHOTKEY函數註冊的熱鍵時提交此訊息
WM_PRINT = 791;
應用程式發送此訊息僅當WINDOWS或其它應用程式發出一個請求要求繪製一個應用程式的一部分;
WM_PRINTCLIENT = 792;
WM_HANDHELDFIRST = 856;
WM_HANDHELDLAST = 863;
WM_PENWINFIRST = $0380;
WM_PENWINLAST = $038F;
WM_COALESCE_FIRST = $0390;
WM_COALESCE_LAST = $039F;
WM_DDE_FIRST = $03E0;
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 = $8000;
WM_USER = $0400;
此訊息能輔助應用程式自訂私人訊息;
/////////////////////////////////////////////////////////////////////
通知訊息(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 C L 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 T E加亮應當去掉
組合框
C B N _ C L O S E U P組合框的列表框被關閉
C B N _ D B L C L K使用者雙擊了一個字串
C B N _ D R O P D O W N組合框的列表框被拉出
C B N _ E D I T C H A N G E使用者修改了編輯框中的文本
C B N _ E D I T U P D AT E編輯框內的文本即將更新
C B N _ E R R S PA C E組合框記憶體不足
C B N _ K I L L F O C U S組合框失去輸入焦點
C B N _ S E L C H A N G E在組合框中選擇了一項
C B N _ S E L E N D C A N C E L使用者的選擇應當被取消
C B N _ S E L E N D O K使用者的選擇是合法的
C B N _ S E T F O C U S組合框獲得輸入焦點
編輯框
E N _ C H A N G E編輯框中的文本己更新
E N _ E R R S PA C E編輯框記憶體不足
E N _ H S C R O L L使用者點擊了水平捲軸
E N _ K I L L F O C U S編輯框正在失去輸入焦點
E N _ M A X T E X T插入的內容被截斷
E N _ S E T F O C U S編輯框獲得輸入焦點
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 PA C E列表框記憶體不夠
L B N _ K I L L F O C U S列表框正在失去輸入焦點
L B N _ S E L C A N C E L選擇被取消
L B N _ S E L C H A N G E選擇了另一項
L B N _ S E T F O C U S列表框獲得輸入焦點
總共有 4294967295 個。
說明:
SendMessage API 用天給可用控制代碼定址的視窗控制項發送訊息.
VB聲明
private Declare Function SendMessage Lib "user32"Aliad "SendMessageA"-
(ByVal hwnd As Long,ByVal wMsg As Long,-
ByVal wParam As Long,lparam As Any) As Long
參數
參數 說明
hwnd 訊息所發往的視窗的控制代碼.
wMsg 欲發送的訊息.
wParam wParam 的用法取決於所發的訊息.
lparam lParam 的用法取決於所發的訊息.
注釋
在將控制權返回到應用程式之前,SendMessage API等待它的目處理該訊息.
樣本
下面的樣本介紹了如何使用WM_SETTEXT訊息設定VB表單的標題.
Private Sub Command1_Click()
Dim rc As Long
Dim cap As String
cap="Sent Text" & Chr$(0)
rc =SendMessage(hwnd,WM_SETTEXT,0,ByVal cap)
End Sub
2007-6-8 8:42:00