• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 224  文章 - 41  trackbacks - 0
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            享受編程

            常用鏈接

            留言簿(11)

            隨筆分類(159)

            隨筆檔案(224)

            文章分類(2)

            文章檔案(4)

            經典c++博客

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            source:http://blog.itpub.net/post/4630/412209

                首先
            我們了解一下Windows的消息機制。Windows是一個消息驅動式系統,Windows消息提供應用程序與應用程序之間,應用程序與Windows系統之間進行通信的手段

            舉個例子,打開記事本程序,該程序有一個文件菜單。 那么,在運行該程序的時候,如果用戶單擊文件菜單里的新建命令, 這個動作將被Windows所捕捉,Windows經過分析得知這個動作應該由我們打開的記事本程序所來處理,然后Windows就發送個消息 譬如我們編程的時候有時用到的 WM_COMMAND的消息給記事本,然后記事本就把這個消息處理掉。 這個過程就是消息處理。

            接下來,我們把SendMessage的完整形式講一下

            SendMessage

            Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

            別名

            SendMessageA

            說明

            調用一個窗口的窗口函數,將一條消息發給那個窗口。除非消息處理完畢,否則該函數不會返回

            SendMessage所包含4個參數

            LRESULT SendMessage(

            HWND hWnd,      // handle of destination window

            UINT Msg,       // message to send

            WPARAM wParam,  // first message parameter

            LPARAM lParam   // second message parameter

            );

             

            hwnd 32位的窗口句柄窗口可以是任何類型的屏幕對象,因為Win32能夠維護大多數可視對象的句柄

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

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

            lParam 通常是一個指向內存中數據的指針。

            這兩個是可選的參數,用來提供關于wMsg消息更多的信息,不同的wMsg可能使用這兩個參數中的012個,如果不需要哪個附加參數,則將實參賦為NULL(在VB中賦為0)。

            比如:WM_LBUTTONDOWN消息:

            The WM_LBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.

            WM_LBUTTONDOWN 
            fwKeys = wParam;        // key flags 
            xPos = LOWORD(lParam);  // horizontal position of cursor 
            yPos = HIWORD(lParam);  // vertical position of cursor 
            這里SendMessage是個窗口發消息,所以xPosyPos兩個變量應該是我們給的,也就是lParam變量,我們就要想辦法把x,y的值傳到lParam中。MAKELPARAM宏可以完成這個功能。

            fwKeys

            Value of wParam. Indicates whether various virtual keys are down. This parameter can be any combination of the following values:

            Value

            Description

            MK_CONTROL

            Set if the ctrl key is down.

            MK_LBUTTON

            Set if the left mouse button is down.

            MK_MBUTTON

            Set if the middle mouse button is down.

            MK_RBUTTON

            Set if the right mouse button is down.

            MK_SHIFT

            Set if the shift key is down.

            SendMessage的寫法可以如下,給m_hDestWnd的程序發送在X1,Y1處單擊鼠標左鍵的消息。

            ::SendMessage(m_hDestWnd,WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(X1,Y1));

            wMsg函數

             

            wMsg函數

             

            WM_CREATE 創建一個窗口

            WM_DESTROY 當一個窗口被破壞時發送

            WM_MOVE 移動一個窗口

            WM_SIZE 改變一個窗口的大小

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

            WM_SETFOCUS 一個窗口獲得焦點

            WM_KILLFOCUS 一個窗口失去焦點

            WM_ENABLE 一個窗口改變成Enable狀態

            WM_SETREDRAW 設置窗口是否能重畫

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

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

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

            WM_PAINT 要求一個窗口重畫自己

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

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

            WM_QUIT 用來結束程序運行

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

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

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

            WM_ENDSESSION 當系統進程發出 WM_QUERYENDSESSION消息后,此消息發送給應用程序,通知它對話是否結束

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            WM_DRAWITEM buttoncomboboxlistboxmenu的可視外觀改變時發送

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

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

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

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

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

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

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

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

            WM_COMPAREITEM 發送此消息來判定comboboxlistbox新增加的項的相對位置

            WM_COMPACTING 顯示內存已經很少了

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

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

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

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

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

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

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

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

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

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

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

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

            WM_CONTEXTMENU 當用戶某個窗口中點擊了一下右鍵就發送此消息給這個窗口WM_styleCHANGING 當調用SETWINDOWLONG函數將要改變一個或多個 窗口的風格時發送此消息給那個窗口

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            WM_NCLBUTTONDBLCLK 當用戶雙擊鼠標左鍵同時光標某個窗口在非客戶區十發送此消息
            WM_NCRBUTTONDOWN
            當用戶按下鼠標右鍵同時光標又在窗口的非客戶區時發送此消息

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

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

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

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

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

            WM_KEYFIRST WM_KEYDOWN 按下一個鍵

            WM_KEYUP 釋放一個鍵

            WM_CHAR 按下某鍵,并已發出WM_KEYDOWN WM_KEYUP消息

            WM_DEADCHAR 當用translatemessage函數翻譯

            WM_KEYUP消息時發送此消息給擁有焦點的窗口

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

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

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

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

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

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

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

            WM_TIMER 發生了定時器事件

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

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

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

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

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

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

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

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

            WM_CTLCOLOREDIT 當一個編輯型控件將要被繪制時發送此消息給它的父窗口 通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置編輯框的文本和背景顏色

            WM_CTLCOLORLISTBOX 當一個列表框控件將要被繪制前發送此消息給它的父窗口 通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置列表框的文本和背景顏色

            WM_CTLCOLORBTN 當一個按鈕控件將要被繪制時
            發送此消息給它的父窗口 通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置按紐的文本和背景顏色

            WM_CTLCOLORDLG 當一個對話框控件將要被繪制前發送此消息給它的父窗口,通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置對話框的文本背景顏色

            WM_CTLCOLORSCROLLBAR 當一個滾動條控件將要被繪制時發送此消息給它的父窗口 通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置滾動條的背景顏色

            WM_CTLCOLORSTATIC 當一個靜態控件將要被繪制時發送此消息給它的父窗口 通過響應這條消息,所有者窗口可以 通過使用給定的相關顯示設備的句柄來設置靜態控件的文本和背景顏色

            WM_MOUSEFIRST WM_MOUSEMOVE 移動鼠標

            WM_LBUTTONDOWN 按下鼠標左鍵

            WM_LBUTTONUP 釋放鼠標左鍵

            WM_LBUTTONDBLCLK 雙擊鼠標左鍵

            WM_RBUTTONDOWN 按下鼠標右鍵

            WM_RBUTTONUP 釋放鼠標右鍵

            WM_RBUTTONDBLCLK 雙擊鼠標右鍵

            WM_MBUTTONDOWN 按下鼠標中鍵

            WM_MBUTTONUP 釋放鼠標中鍵

            WM_MBUTTONDBLCLK 雙擊鼠標中鍵

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            WM_MDIICONARRANGE 程序 發送此消息給MDI客戶窗口重新排列所有最小化的MDI子窗口WM_MDIGETACTIVE 程序 發送此消息給MDI客戶窗口來找到激活的子窗口的句柄

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

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

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

            WM_PASTE 程序發送此消息給editcontrolcombobox從剪貼板中得到數據

            WM_CLEAR 程序發送此消息給editcontrolcombobox清除當前選擇的內容

            WM_UNDO 程序發送此消息給editcontrolcombobox撤消最后一次操作

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

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

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

            WM_SIZECLIPBOARD 當剪貼板包含CF_OWNERDIPLAY格式的數據并且剪貼板觀察窗口的客戶區域的大小已經改變是

            此消息通過剪貼板觀察窗口發送給剪貼板的所有者

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

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

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

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

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

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

            WM_HOTKEY 當用戶按下由REGISTERHOTKEY函數注冊的熱鍵時提交此消息WM_PRINT 應用程序發送此消息僅當

            WINDOWS或其它應用程序發出一個請求要求繪制一個應用程序的一部分

            posted on 2008-11-30 11:22 漂漂 閱讀(4777) 評論(0)  編輯 收藏 引用 所屬分類: visual studio
            青青久久精品国产免费看| 人妻精品久久久久中文字幕69 | 国色天香久久久久久久小说| 伊人久久综在合线亚洲2019 | jizzjizz国产精品久久| 老司机午夜网站国内精品久久久久久久久 | 国内精品久久久久影院优 | 久久国产综合精品五月天| 亚洲成色999久久网站| 日本免费久久久久久久网站 | 久久99精品国产麻豆不卡| 国产高清美女一级a毛片久久w| 久久99热国产这有精品| 国产L精品国产亚洲区久久| 欧美一区二区精品久久| 久久久久九国产精品| 久久青青色综合| 久久亚洲AV成人出白浆无码国产| 久久久久免费看成人影片| 久久精品国产精品亚洲精品| 国产精品日韩深夜福利久久| 久久精品无码免费不卡| 久久久精品国产免大香伊 | 久久高潮一级毛片免费| 九九精品久久久久久噜噜| 久久亚洲AV成人无码国产| 激情五月综合综合久久69| 久久精品国产久精国产果冻传媒| 久久66热人妻偷产精品9| 精品乱码久久久久久夜夜嗨| 中文字幕乱码人妻无码久久| av午夜福利一片免费看久久| 久久久久国产亚洲AV麻豆| 丰满少妇人妻久久久久久| 午夜精品久久久久成人| 99精品久久精品一区二区| 久久久精品国产| 久久亚洲高清观看| 久久综合综合久久综合| 亚洲国产精品无码久久久久久曰| 国产精品久久国产精麻豆99网站|