SendMessage 用法詳解及消息詳解

函數功能:該函數將指定的消息發送到一個或多個窗口。此函數爲指定的窗口調用窗口程序,直到窗口程序處理完消息再返回。而函數PostMessage不同,將一個消息寄送到一個線程的消息隊列後立即返回。

函數原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);

參數:

hWnd:其窗口程序將接收消息的窗口的句柄。如果此參數爲HWND_BROADCAST,則消息將被髮送到系統中所有頂層窗口,包括無效或不可見的非自身擁有的窗口、被覆蓋的窗口和彈出式窗口,但消息不被髮送到子窗口。

Msg:指定被髮送的消息。

wParam:指定附加的消息指定信息。

IParam:指定附加的消息指定信息。

返回值:返回值指定消息處理的結果,依賴於所發送的消息。

備註:需要用HWND_BROADCAST通信的應用程序應當使用函數RegisterWindowMessage來爲應用程序間的通信取得一個唯一的消息。
(***本文出處:南山古桃(nsgtao)的百度空間:http://hi.baidu.com/nsgtao/ ****)

如果指定的窗口是由調用線程創建的,則窗口程序立即作爲子程序調用。如果指定的窗口是由不同線程創建的,則系統切換到該線程並調用恰當的窗口程序。線程間的消息只有在線程執行消息檢索代碼時才被處理。發送線程被阻塞直到接收線程處理完消息爲止。


Windows是一個消息驅動式系統,SendMessage是應用程序和應用程序之間進行消息傳遞的主要手段之一,這裏我搜集整理了SendMessage函數的詳細參數介紹,以備自用。
  VFP聲明:
  DECLARE INTEGER SendMessage IN user32;
  INTEGER hWnd,;
  INTEGER wMsg,;
  INTEGER wParam,;
  INTEGER lParam
  參數1:hWnd-窗口句柄。窗口可以是任何類型的屏幕對象。
  參數2:wMsg-用於區別其他消息的常量值.
  參數3:wParam-通常是一個與消息有關的常量值,也可能是窗口或控件的句柄.
  參數4: lParam-通常是一個指向內存中數據的指針。
  wMsg參數常量值:
  #DeFine WM_CREATE 0x01
  創建一個窗口
  #DeFine WM_DESTROY 0x02
  當一個窗口被破壞時發送
  #DeFine WM_MOVE 0x03
  移動一個窗口
  #DeFine WM_SIZE 0x05
  改變一個窗口的大小
  #DeFine WM_ACTIVATE 0x06
  一個窗口被激活或失去激活狀態
  #DeFine WM_SETFOCUS 0x07
  一個窗口獲得焦點
  #DeFine WM_KILLFOCUS 0x08
  一個窗口失去焦點
  #DeFine WM_ENABLE 0x0A
  一個窗口改變成Enable狀態
  #DeFine WM_SETREDRAW 0x0B
  設置窗口是否能重畫
  #DeFine WM_SETTEXT 0x0C
  應用程序發送此消息來設置一個窗口的文本
  #DeFine WM_GETTEXT 0x0D
  應用程序發送此消息來複制對應窗口的文本到緩衝區
  #DeFine WM_GETTEXTLENGTH 0x0E
  得到與一個窗口有關的文本的長度(不包含空字符)
  #DeFine WM_PAINT 0x0F
  要求一個窗口重畫自己
  #DeFine WM_CLOSE 0x10
  當一個窗口或應用程序要關閉時發送一個信號
  #DeFine WM_QUERYENDSESSION 0x11
  當用戶選擇結束對話框或程序自己調用ExitWindows函數
  #DeFine WM_QUIT 0x12
  用來結束程序運行
  #DeFine WM_QUERYOPEN 0x13
  當用戶窗口恢復以前的大小位置時,把此消息發送給某個圖標
  #DeFine WM_ERASEBKGND 0x14
  當窗口背景必須被擦除時(例在窗口改變大小時)
  #DeFine WM_SYSCOLORCHANGE 0x15
  當系統顏色改變時,發送此消息給所有頂級窗口
  #DeFine WM_ENDSESSION 0x16
  當系統進程發出WM_QUERYENDSESSION消息後,此消息發送給應用程序,通知它對話是否結束
  #DeFine WM_SHOWWINDOW 0x18
  當隱藏或顯示窗口是發送此消息給這個窗口
  #DeFine WM_ACTIVATEAPP 0x1C
  發此消息給應用程序哪個窗口是激活的,哪個是非激活的
  #DeFine WM_FONTCHANGE 0x1D
  當系統的字體資源庫變化時發送此消息給所有頂級窗口
  #DeFine WM_TIMECHANGE 0x1E
  當系統的時間變化時發送此消息給所有頂級窗口
  #DeFine WM_CANCELMODE 0x1F
  發送此消息來取消某種正在進行的摸態(操作)
  #DeFine WM_SETCURSOR 0x20
  如果鼠標引起光標在某個窗口中移動且鼠標輸入沒有被捕獲時,就發消息給某個窗口
  #DeFine WM_MOUSEACTIVATE 0x21
  當光標在某個非激活的窗口中而用戶正按着鼠標的某個鍵發送此消息給當前窗口
  #DeFine WM_CHILDACTIVATE 0x22
  發送此消息給MDI子窗口當用戶點擊此窗口的標題欄,或當窗口被激活,移動,改變大小
  #DeFine WM_QUEUESYNC 0x23
  此消息由基於計算機的訓練程序發送,通過WH_JOURNALPALYBACK的hook程序分離出用戶輸入消息
  #DeFine WM_GETMINMAXINFO 0x24
  此消息發送給窗口當它將要改變大小或位置
  #DeFine WM_PAINTICON 0x26
  發送給最小化窗口當它圖標將要被重畫
  #DeFine WM_ICONERASEBKGND 0x27
  此消息發送給某個最小化窗口,僅當它在畫圖標前它的背景必須被重畫
  #DeFine WM_NEXTDLGCTL 0x28
  發送此消息給一個對話框程序去更改焦點位置
  #DeFine WM_SPOOLERSTATUS 0x2A
  每當打印管理列隊增加或減少一條作業時發出此消息
  #DeFine WM_DRAWITEM 0x2B
  當button,combobox,listbox,menu的可視外觀改變時發送
  #DeFine WM_MEASUREITEM 0x2C
  當button, combo box, list box, list view control, or menu item 被創建時
  #DeFine WM_VKEYTOITEM 0x2E
  此消息有一個LBS_WANTKEYBOARDINPUT風格的發出給它的所有者來響應WM_KEYDOWN消息
  #DeFine WM_CHARTOITEM 0x2F
  此消息由一個LBS_WANTKEYBOARDINPUT風格的列表框發送給他的所有者來響應WM_CHAR消息
  #DeFine WM_SETFONT 0x30
  當繪製文本時程序發送此消息得到控件要用的顏色
  #DeFine WM_GETFONT 0x31
  應用程序發送此消息得到當前控件繪製文本的字體
  #DeFine WM_SETHOTKEY 0x32
  應用程序發送此消息讓一個窗口與一個熱鍵相關連
  #DeFine WM_GETHOTKEY 0x33
  應用程序發送此消息來判斷熱鍵與某個窗口是否有關聯
  #DeFine WM_QUERYDRAGICON 0x37
  此消息發送給最小化窗口,當此窗口將要被拖放而它的類中沒有定義圖標,應用程序能返回一個圖標或光標的句柄,當用戶拖放圖標時系統顯示這個圖標或光標
  #DeFine WM_COMPAREITEM 0x39
  發送此消息來判定combobox或listbox新增加的項的相對位置
  #DeFine WM_COMPACTING 0x41
  顯示內存已經很少了
  #DeFine WM_WINDOWPOSCHANGING 0x46
  發送此消息給那個窗口的大小和位置將要被改變時,來調用setwindowpos函數或其它窗口管理函數
  #DeFine WM_WINDOWPOSCHANGED 0x47
  發送此消息給那個窗口的大小和位置已經被改變時,來調用setwindowpos函數或其它窗口管理函數
  #DeFine WM_POWER 0x48
  當系統將要進入暫停狀態時發送此消息
  #DeFine WM_COPYDATA 0x4A
  當一個應用程序傳遞數據給另一個應用程序時發送此消息
  #DeFine WM_CANCELJOURNA 0x4B
  當某個用戶取消程序日誌激活狀態,提交此消息給程序
  #DeFine WM_NOTIFY 0x4E
  當某個控件的某個事件已經發生或這個控件需要得到一些信息時,發送此消息給它的父窗口
  #DeFine WM_INPUTLANGCHANGEREQUEST 0x50
  當用戶選擇某種輸入語言,或輸入語言的熱鍵改變
  #DeFine WM_INPUTLANGCHANGE 0x51
  當平臺現場已經被改變後發送此消息給受影響的最頂級窗口
  #DeFine WM_TCARD 0x52
  當程序已經初始化windows幫助例程時發送此消息給應用程序
  #DeFine WM_HELP 0x53
  此消息顯示用戶按下了F1,如果某個菜單是激活的,就發送此消息個此窗口關聯的菜單,否則就發送給有焦點的窗口,如果當前都沒有焦點,就把此消息發送給當前激活的窗口
  #DeFine WM_USERCHANGED 0x54
  當用戶已經登入或退出後發送此消息給所有的窗口,當用戶登入或退出時系統更新用戶的具體設置信息,在用戶更新設置時系統馬上發送此消息
  #DeFine WM_NOTIFYFORMAT 0x55
  公用控件,自定義控件和他們的父窗口通過此消息來判斷控件是使用ANSI還是UNICODE結構
  #DeFine WM_CONTEXTMENU ??
  當用戶某個窗口中點擊了一下右鍵就發送此消息給這個窗口
  #DeFine WM_STYLECHANGING 0x7C
  當調用SETWINDOWLONG函數將要改變一個或多個 窗口的風格時發送此消息給那個窗口
  #DeFine WM_STYLECHANGED 0x7D
  當調用SETWINDOWLONG函數一個或多個 窗口的風格後發送此消息給那個窗口
  #DeFine WM_DISPLAYCHANGE 0x7E
  當顯示器的分辨率改變後發送此消息給所有的窗口
  #DeFine WM_GETICON 0x7F
  此消息發送給某個窗口來返回與某個窗口有關連的大圖標或小圖標的句柄
  #DeFine WM_SETICON 0x80
  程序發送此消息讓一個新的大圖標或小圖標與某個窗口關聯
  #DeFine WM_NCCREATE 0x81
  當某個窗口第一次被創建時,此消息在WM_CREATE消息發送前發送
  #DeFine WM_NCDESTROY 0x82
  此消息通知某個窗口,非客戶區正在銷燬
  #DeFine WM_NCCALCSIZE 0x83
  當某個窗口的客戶區域必須被覈算時發送此消息
  #DeFine WM_NCHITTEST 0x84
  移動鼠標,按住或釋放鼠標時發生
  #DeFine WM_NCPAINT 0x85
  程序發送此消息給某個窗口當它(窗口)的框架必須被繪製時
  #DeFine WM_NCACTIVATE 0x86
  此消息發送給某個窗口僅當它的非客戶區需要被改變來顯示是激活還是非激活狀態
  #DeFine WM_GETDLGCODE 0x87
  發送此消息給某個與對話框程序關聯的控件,widdows控制方位鍵和TAB鍵使輸入進入此控件通過應
  #DeFine WM_NCMOUSEMOVE 0xA0
  當光標在一個窗口的非客戶區內移動時發送此消息給這個窗口 非客戶區爲:窗體的標題欄及窗 的邊框體
  #DeFine WM_NCLBUTTONDOWN 0xA1
  當光標在一個窗口的非客戶區同時按下鼠標左鍵時提交此消息
  #DeFine WM_NCLBUTTONUP 0xA2
  當用戶釋放鼠標左鍵同時光標某個窗口在非客戶區十發送此消息
  #DeFine WM_NCLBUTTONDBLCLK 0xA3
  當用戶雙擊鼠標左鍵同時光標某個窗口在非客戶區十發送此消息
  #DeFine WM_NCRBUTTONDOWN 0xA4
  當用戶按下鼠標右鍵同時光標又在窗口的非客戶區時發送此消息
  #DeFine WM_NCRBUTTONUP 0xA5
  當用戶釋放鼠標右鍵同時光標又在窗口的非客戶區時發送此消息
  #DeFine WM_NCRBUTTONDBLCLK 0xA6
  當用戶雙擊鼠標右鍵同時光標某個窗口在非客戶區十發送此消息
  #DeFine WM_NCMBUTTONDOWN 0xA7
  當用戶按下鼠標中鍵同時光標又在窗口的非客戶區時發送此消息
  #DeFine WM_NCMBUTTONUP 0xA8
  當用戶釋放鼠標中鍵同時光標又在窗口的非客戶區時發送此消息
  #DeFine WM_NCMBUTTONDBLCLK 0xA9
  當用戶雙擊鼠標中鍵同時光標又在窗口的非客戶區時發送此消息#DeFine WM_KEYFIRST 0x100
  WM_KEYDOWN 按下一個鍵
  #DeFine WM_KEYUP 0x101
  釋放一個鍵
  #DeFine WM_CHAR 0x102
  按下某鍵,並已發出WM_KEYDOWN, WM_KEYUP消息
  #DeFine WM_DEADCHAR 0x103
  當用translatemessage函數翻譯WM_KEYUP消息時發送此消息給擁有焦點的窗口
  #DeFine WM_SYSKEYDOWN 0x104
  當用戶按住ALT鍵同時按下其它鍵時提交此消息給擁有焦點的窗口
  #DeFine WM_SYSKEYUP 0x105
  當用戶釋放一個鍵同時ALT 鍵還按着時提交此消息給擁有焦點的窗口
  #DeFine WM_SYSCHAR 0x106
  當WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函數翻譯後提交此消息給擁有焦點的窗口
  #DeFine WM_SYSDEADCHAR 0x107
  當WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函數翻譯後發送此消息給擁有焦點的窗口
  #DeFine WM_INITDIALOG 0x110
  在一個對話框程序被顯示前發送此消息給它,通常用此消息初始化控件和執行其它任務
  #DeFine WM_COMMAND 0x111
  當用戶選擇一條菜單命令項或當某個控件發送一條消息給它的父窗口,一個快捷鍵被翻譯
  #DeFine WM_SYSCOMMAND 0x112
  當用戶選擇窗口菜單的一條命令或當用戶選擇最大化或最小化時那個窗口會收到此消息
  #DeFine WM_TIMER 0x113
  發生了定時器事件
  #DeFine WM_HSCROLL 0x114
  當一個窗口標準水平滾動條產生一個滾動事件時發送此消息給那個窗口,也發送給擁有它的控件
  #DeFine WM_VSCROLL 0x115
  當一個窗口標準垂直滾動條產生一個滾動事件時發送此消息給那個窗口也,發送給擁有它的控件
  #DeFine WM_INITMENU 0x116
  當一個菜單將要被激活時發送此消息,它發生在用戶菜單條中的某項或按下某個菜單鍵,它允許程序在顯示前更改菜單
  #DeFine WM_INITMENUPOPUP 0x117
  當一個下拉菜單或子菜單將要被激活時發送此消息,它允許程序在它顯示前更改菜單,而不要改變全部
  #DeFine WM_MENUSELECT 0x11F
  當用戶選擇一條菜單項時發送此消息給菜單的所有者(一般是窗口)
  #DeFine WM_MENUCHAR 0x120
  當菜單已被激活用戶按下了某個鍵(不同於加速鍵),發送此消息給菜單的所有者
  #DeFine WM_ENTERIDLE 0x121
  當一個模態對話框或菜單進入空載狀態時發送此消息給它的所有者,一個模態對話框或菜單進入空載狀態就是在處理完一條或幾條先前的消息後沒有消息它的列隊中等待
  #DeFine WM_CTLCOLORMSGBOX 0x132
  在windows繪製消息框前發送此消息給消息框的所有者窗口,通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置消息框的文本和背景顏色
  #DeFine WM_CTLCOLOREDIT 0x133
  當一個編輯型控件將要被繪製時發送此消息給它的父窗口 通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置編輯框的文本和背景顏色
  #DeFine WM_CTLCOLORLISTBOX 0x134
  當一個列表框控件將要被繪製前發送此消息給它的父窗口 通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置列表框的文本和背景顏色
  #DeFine WM_CTLCOLORBTN 0x135
  當一個按鈕控件將要被繪製時發送此消息給它的父窗口 通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置按紐的文本和背景顏色
  #DeFine WM_CTLCOLORDLG 0x136
  當一個對話框控件將要被繪製前發送此消息給它的父窗口 通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置對話框的文本背景顏色
  #DeFine WM_CTLCOLORSCROLLBAR 0x137
  當一個滾動條控件將要被繪製時發送此消息給它的父窗口 通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置滾動條的背景顏色
  #DeFine WM_CTLCOLORSTATIC 0x138
  當一個靜態控件將要被繪製時發送此消息給它的父窗口 通過響應這條消息,所有者窗口可以 通過使用給定的相關顯示設備的句柄來設置靜態控件的文本和背景顏色
  #DeFine WM_MOUSEFIRST 0x200
  移動鼠標時發生
  #DeFine WM_MOUSEMOVE 0x200
  移動鼠標時發生,同WM_MOUSEFIRST
  #DeFine WM_LBUTTONDOWN 0x201
  按下鼠標左鍵
  #DeFine WM_LBUTTONUP 0x202
  釋放鼠標左鍵
  #DeFine WM_LBUTTONDBLCLK 0x203
  雙擊鼠標左鍵
  #DeFine WM_RBUTTONDOWN 0x204
  按下鼠標右鍵
  #DeFine WM_RBUTTONUP 0x205
  釋放鼠標右鍵
  #DeFine WM_RBUTTONDBLCLK 0x206
  雙擊鼠標右鍵
  #DeFine WM_MBUTTONDOWN 0x207
  按下鼠標中鍵
  #DeFine WM_MBUTTONUP 0x208
  釋放鼠標中鍵
  #DeFine WM_MBUTTONDBLCLK 0x209
  雙擊鼠標中鍵
  #DeFine WM_MOUSEWHEEL 0x20A
  當鼠標輪子轉動時發送此消息個當前有焦點的控件 Buttons
  
  BM_CLICK button被點擊 消息
  BM_GETCHECK 用於check boxes 或radio boxes 。查看 是否 checked 了。
  
  BM_GETSTATE 發送此消息,可返回 button 的狀態,如 是否被 checked;是否 可用(不可用就 變灰了)
  
  BM_SETCHECK 如果 已經 checked 了,發送此消息後,變爲 unchecked,就是 那個鉤鉤 沒被 選上。ok?
  
  BM_SETSTATE 設置 button被 點擊 狀態。
  
  ====================
  Combo Boxes
  
  CB_ADDSTRING 添加 字符串到 Combo Boxes 。
  CB_DELETESTRING 刪除 Combo Boxes 中的 條目,既 item
  CB_GETCOUNT 得到 Combo Boxes 條目 item 的 數目
  CB_GETCURSEL 返回 Combo Boxes 中被選 條目 在 Combo Boxes 中 的位置,第一條爲0 。
  如果 沒有 條目或出錯,則返回 -1
  
  CB_GETDROPPEDSTATE 發送此消息,可判斷 Combo Boxes 的list box 是否被 放下,如果 是,返回 非零值,不是,則 返回 0
  
  CB_GETLBTEXT 得到 combo box 的 條目 的text。 返回值 是 這個text 的長度。
  CB_GETLBTEXTLEN 返回值 是 條目的 text 的長度。
  CB_INSERTSTRING 插入 字符串 條目到 combo box 中
  CB_RESETCONTENT 清空 combo box 所有條目
  CB_SETCURSEL 設置 combo box 被選 條目。
  CB_SHOWDROPDOWN 讓 combo box 的listbox 下拉。 既 顯出 所有 條目
  ===================
  Edit Controls
  
  EM_CANUNDO 決定 上一次操作 是否可以 undo (撤消操作)。如果可以,則可發送 EM_undo
  
  EM_GETFIRSTVISIBLELINE 在 multi-line 控件中,找到 最上層的 可見的 行號。次行號是相對於 所有行的。
  
  EM_GETPASSWORDCHAR 返回 密碼框的 字符集。既 是查看密碼。
  EM_GETSEL 返回在 可編輯 控件中 ,被選擇(HIGHLIGHT高量選擇)的字符集 的 起點 和終點的 位置。
  用 sendmessage 的wParam 參數 返回 起點位置,lParam 返回 終點位置
  EM_REPLACESEL 用不同的字符串 替換 可編輯 控件 中的 字符串,如果 可編輯 控件中 沒有 字符串,則 此消息變爲 添加 字符串
  EM_SETPASSWORDCHAR 在可編輯 控件中 設置 密碼字符集 ,既 用* 代替
  EM_UNDO 發送 操作 撤消 消息。
  ======================
  IP Address Control
  ===================
  
  IPM_CLEARADDRESS 清除 IP 地址控件(IP Address control)的內容
  IPM_GETADDRESS 從IP 地址控件 獲得 存儲在 它中的 IP 地址 信息/
  IPM_ISBLANK 決定 IP 地址控件 是否可以爲 空值。既 127.0.0.1 之類的地址 爲 空。
  IPM_SETADDRESS 在 IP 地址控件中設置 IP 地址。
  IPM_SETFOCUS 在 IP 地址控件中,當需要輸入 IP 地址時, 使之獲得 鍵盤輸入 焦點
  IPM_SETRANGE 設置 輸入IP 地址的有效範圍
  =====================
  Media Control Interface (MCI)
  =============================
  MM_MCINOTIFY 告訴 窗體 MCI 命令 完成的狀態. 這個 狀態包括 success, failure, 或 其它事件
  
  Menus
  =============================
  WM_COMMAND 當 用戶 選擇 菜單中的 項目後,將向 窗體 發送此消息. 窗體 受到 此消息後,再 決定 下一個 行爲
  
  WM_INITMENU 當 菜單 準備 顯示 前,向 窗體發送 此消息, 窗體 將 初始化 菜單 項.
  
  WM_SYSCOMMAND 向 窗體 發送 用戶點擊 系統菜單 消息. 窗體將 響應 這個消息 ,決定 下個 行爲.
  ================
  Windows
  =====================
  
  WM_CLOSE 發送 讓窗體關閉的消息,有些窗體會 在此時 彈出個 關閉對話框。
  
  WM_GETTEXT 返回 窗體 標題欄 (caption 屬性)。 需要先 用WM_GETTEXTLENGTH 獲得 字符串長度
  
  WM_GETTEXTLENGTH 見上!
  
  WM_HELP 發送此 消息後,將 顯示 指定的 HELP 文件
  WM_SETTEXT 設置 窗體 標題欄 。
  ==============================
  List Boxes
  ===============
  
  LB_ADDSTRING 在條目中添加 字符串
  
  LB_DELETESTRING 刪除一個 條目. 條目 序號是從 0 開始的.
  
  LB_GETCOUNT 得到 條目總數.
  
  LB_GETCURSEL 得到 單選 的list box 的 選項條目的 序號
  
  LB_GETSEL 判斷 list 的 條目 是否被選上, 如果 選上了,則返回 >0 的值.否則 返回 0 ,表示 用戶沒選擇條目
  
  LB_GETSELCOUNT 獲得 可多選 的list , 被用戶選擇的條目的個數.
  
  LB_GETSELITEMS 返回 可多選的list 的 被選條目的 序號. 可返回 數組.
  
  LB_GETTEXT 得到 list中的 一個 條目的 text 值
  LB_GETTEXTLEN 得到 list中的 一個 條目的 text 值的長度
  LB_INSERTSTRING 在list 中,插入 一個條目。如果成功,將返回 插入後,此條目的序號。
  LB_RESETCONTENT 清空 所有的 list 中的 條目。
  LB_SETCURSEL 對單選 的list box, 設定 用戶 選擇條目的 具體值
  LB_SETSEL 對多選 的list box, 設定 用戶 選擇條目的 具體值
  =======================================================
  Mouse
  ==================
  WM_LBUTTONDBLCLK 當鼠標在一個窗體範圍內時,告訴此窗體 鼠標左鍵 已雙擊 。返回值 0
  
  WM_LBUTTONDOWN 當鼠標在一個窗體範圍內時,告訴此窗體 鼠標左鍵 已點擊,返回值 0
  WM_LBUTTONUP 當鼠標在一個窗體範圍內時,告訴此窗體 鼠標左鍵 已釋放,返回值 0
  
  WM_MBUTTONDBLCLK 當鼠標在一個窗體範圍內時,告訴此窗體 鼠標中鍵 已雙擊 。返回值 0
  WM_MBUTTONDOWN 當鼠標在一個窗體範圍內時,告訴此窗體 鼠標中鍵 已點擊,返回值 0
  WM_MBUTTONUP 當鼠標在一個窗體範圍內時,告訴此窗體 鼠標中鍵 已釋放,返回值 0
  最近越來越覺得,windows果然是很不安全啊,,,想要學windows平臺的編程,就要學mfc,在win上,mfc簡直無所不能。。。


PostMessage
開放分類: 編程 、 計算機 、 API
函數功能:該函數將一個消息放入(寄送)到與指定窗口創建的線程相聯繫消息隊列裏,不等待線程處理消息就返回。消息隊列裏的消息通過調用GetMessage和PeekMessage取得。

函數原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);

參數

hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含義的兩個值:

HWND.BROADCAST:消息被寄送到系統的所有頂層窗口,包括無效或不可見的非自身擁有的窗口、被覆蓋的窗口和彈出式窗口。消息不被寄送到子窗口。

NULL:此函數的操作和調用參數dwThread設置爲當前線程的標識符PostThreadMessage函數一樣。

Msg:指定被寄送的消息。

(***本文出處:南山古桃(nsgtao)的百度空間:http://hi.baidu.com/nsgtao/ ****)
wParam:指定附加的消息特定的信息。

IParam:指定附加的消息特定的信息。

返回值:如果函數調用成功,返回非零值:如果函數調用失敗,返回值是零。若想獲得更多的錯誤信息,請調用GetLastError函數。

備註:需要以 HWND_BROADCAST方式通信的應用程序應當用函數 RegisterwindwosMessage來獲得應用程序間通信的獨特的消息。

如果發送一個低於WM_USER範圍的消息給異步消息函數(PostMessage.SendNotifyMessage,SendMesssgeCallback),消息參數不能包含指針。否則,操作將會失敗。函數將再接收線程處理消息之前返回,發送者將在內存被使用之前釋放。

速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;頭文件:winuser.h;輸入庫:user32.lib;Unicode:在Windows NT環境下以Unicode和ANSI方式實現。


SendMessage與PostMessage的區別

PostMessage將消息放入消息隊列後馬上返回,而SendMessage直到窗口過程處理完消息後才返回

PostMessage

函數將消息添加到應用程序的消息隊列中去。應用程序的消息循環會從消息隊列中提取登記的該消息,再發送到相應的窗口中。

SendMessage

函數可以越過消息隊列直接向窗口過程發送。所以當Windows

需要立刻返回值時使用SendMessage

,當需要不同的應用程序依次處理消息時使用 PostMessage

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章