2012-07-22 126 views
0

我正在閱讀有關GetCapture()函數,它是mfc的一部分。 我還不清楚到它做什麼,以及這意味着什麼捕獲鼠標,因爲它說,在這裏:捕獲鼠標意味着什麼參考GetCapture()函數?

http://msdn.microsoft.com/en-us/library/dxa5eaaa(v=vs.80).aspx

在我的書

它以這種方式使用:

void CSketcherView::OnLButtonUp(UINY nFlags, CPoint point) 
{ 
    if(this == GetCapture()) 
     ReleaseCapture();     // Stop capturing mouse messages 

    // ... add information to document 
} 

那麼GetCapture()返回什麼? 「捕捉」鼠標意味着什麼?

回答

2

捕獲鼠標通常意味着你會得到還是老樣子鼠標事件,即使鼠標光標位置是你的窗口

GetCapture函數返回具有鼠標捕獲當前窗口的界限之外。

+0

所以你說GetCapture()函數返回光標不在那裏的窗口? – Ghost 2012-07-23 10:16:44

+0

它返回的窗口將收到鼠標移動事件 – 2012-07-23 16:13:17

+0

,但不會窗口發送窗口消息,如WM_LBUTTONUP和WM_MOUSEMOVE即使我們不指定使用SetCapture()或GetCapture()? – Ghost 2012-07-25 09:46:35

2

至於鼠標捕獲的目的,具體的例子:

以一個窗口,其中包含兩個按鈕。點擊其中的一個,並保持鼠標按下。現在將鼠標光標拖到第二個按鈕上並釋放鼠標按鈕。第一個按鈕將收到WM_LBUTTONUP消息,但第二個按鈕不會,即使鼠標光標位於其上方。

當第一個按鈕收到WM_LBUTTONDOWN消息時,它將捕獲到的鼠標。當一個窗口捕捉鼠標時,即使鼠標被拖動到其窗口範圍之外,它也會保證它將接收所有後續的鼠標事件(特別是WM_LBUTTONUP消息)。這很重要,它可以將按鈕與按鈕消息匹配並保持適當的狀態。這對於可用性也很重要(如果您單擊一個按鈕並意外移動到另一個按鈕,則既不想觸發第一個按鈕也不想觸發第二個按鈕)。

+0

謝謝,但是你的意思是即使光標在窗口之外,窗口仍然收到消息?我還不是很清楚。 – Ghost 2012-07-24 17:10:28

+0

@Ghost:即使光標在窗口*和*之外,如果該窗口捕獲到鼠標,是的,該窗口仍然會收到一條「WM_LBUTTONUP」消息。您也可能感興趣:http://msdn.microsoft.com/en-us/library/windows/desktop/ms645601%28v=vs.85%29.aspx#_win32_Mouse_Capture – jamesdlin 2012-07-24 20:10:43