2009-08-14 81 views
5

如何檢查鼠標的左鍵是否正在按下/拖動某些東西(我首先提供了第一種可能性)。檢查鼠標LButton是否關閉?

我試過Mouse.IsDraging,但沒有結果。

注意:我在我的應用程序中處理鼠標消息,所以它沒有問題,如果它是一個WM,只是分享一種方式來完成我的任務。

+0

可能重複[德爾福:如何檢查是否有任何鼠標按鈕被按下 - 鼠標事件外?](http://stackoverflow.com/questions/25681543/delphi-how-can-i - 檢查 - 如果任何鼠標按鈕被按下 - 鼠標之外的ev) – Johan 2016-02-03 20:26:37

回答

20

有一個Windows API函數GetAsyncKeyState(),儘管它的名字也可用於獲取鼠標按鈕的狀態。鏈接的文檔直接包含您的問題的答案:

GetAsyncKeyState函數與鼠標按鈕一起使用。但是,它檢查物理鼠標按鈕的狀態,而不是物理按鈕映射到的邏輯鼠標按鈕。例如,呼叫GetAsyncKeyState(VK_LBUTTON)總是返回左側物理鼠標按鈕的狀態,而不管它是否映射到左側或右側的邏輯鼠標按鈕。通過調用GetSystemMetrics(SM_SWAPBUTTON)可以確定系統當前物理鼠標按鈕到邏輯鼠標按鈕的映射,如果鼠標按鈕已被交換,則返回TRUE

結果類型爲short,檢查最重要的位,只是測試值是否定的。

+0

非常好。雖然你提供瞭解決最重要的問題的解決方案,但是你能描述一下獲得它的正式方法嗎? – Vassilis 2015-12-07 14:51:24

+0

@VassilisGr:對不起,我不太瞭解這個要求。編譯器離開類型強制可能是最好的(即正式?)的事情,因爲它將你與32位與64位編譯等問題隔離開來。或者你的意思是如何測試結果中的單個位是否被設置?只需使用'(結果和$ 8000)<> 0'。 – mghie 2015-12-07 18:18:18

+0

正在尋找'(結果和$ 8000)<> 0'。謝謝! – Vassilis 2015-12-08 18:09:02

0
OnMouseMove(UINT nFlags, CPoint point) 
{ 
    m_LButtonPressed=nFlags & MK_LBUTTON; 
    CWnd::OnMouseMove(nFlags, point); 
}