1. 程式人生 > >win32 SetCapture 和 ReleaseCapture的使用

win32 SetCapture 和 ReleaseCapture的使用

最近在用win32寫《visual C++經典遊戲程式設計》中的掃雷遊戲,在寫到滑鼠點選雷區的時候用到了SetCapture,和ReleaseCapture這對系統函式。

那麼為什麼需要用到滑鼠捕獲的函式呢?

我錯誤地認為滑鼠的跟蹤可以由Point進行傳值處理,就能實現我想要的功能,但是我卻疏忽瞭如果我的滑鼠按下的時候把滑鼠移除視窗外面的情況,這種情況的時候滑鼠是在外面的,那麼當我把滑鼠彈起的時候滑鼠的位置就不在掃雷窗口裡面了,因此我需要在按下滑鼠的時候捕獲滑鼠的位置,這樣就解決了滑鼠不在窗口裡面的問題。

 

下面我引用百度百科裡的關於SetCapture的介紹:


 函式功能:該函式在屬於當前執行緒的指定窗口裡設定滑鼠捕獲。一旦視窗捕獲了滑鼠,所有滑鼠輸入都針對該視窗,無論游標是否在視窗的邊界內。同一時刻只能有一個視窗捕獲滑鼠。如果滑鼠游標在另一個執行緒建立的視窗上,只有當滑鼠鍵按下時系統才將滑鼠輸入指向指定的視窗。

  函式原型:HWND SetCapture(HWND hwnd);   引數:   hWnd:當前執行緒裡要捕獲滑鼠的視窗控制代碼。   返回值:返回值是上次捕獲滑鼠的視窗控制代碼。如果不存在那樣的控制代碼,返回值是NULL。   備註:只有前臺窗口才能捕獲滑鼠。如果一個後臺視窗想捕獲滑鼠,則該視窗僅為其游標熱點在該窗 口可見部份的滑鼠事件接收訊息。另外,即使前臺視窗已捕獲了滑鼠,使用者也可點選另一個視窗,將其調入前臺。當一個視窗不再需要所有的滑鼠輸入時,建立該窗 口的執行緒應當呼叫函式ReleaseCapture來釋放滑鼠。此函式不能被用來捕獲另一程序的滑鼠輸入。   Windows 95:呼叫SetCaptune會引起失去滑鼠捕獲的視窗接收一個WM_CAPTURECHANGED訊息。   速查:標頭檔案:Winuser.h:輸入庫:user32.lib。   Javascript 滑鼠捕獲   滑鼠捕獲(setCapture)作用是將滑鼠事件捕獲到當前文件的指定的物件。這個物件會為當前應用程式或整個系統接收所有滑鼠事件。

 

下面我舉一個例子,能簡單地理解SetCapture和ReleaseCapture的作用:

當你在瀏覽本日誌的時候,你會拉動右手邊的滑動條來調整內容上下位置,那麼當你按下左鍵的時候,移動滑鼠到非滾動條處,你會發現上下移動滑鼠滾動條仍然後控制,對,這就是俘獲滑鼠函式SetCapture的作用。