2010-04-26 63 views
1

發生什麼事到現在爲止是這樣的:如何在OnLButtonDown()事件中一次又一次地發生進程,直到我生活在按鈕中?

任何線發生一次,如果我使用while(1)while (nFlags == MK_LBUTTON)其工作,因爲它應該,但我得到一個崩潰。

另一個問題,或者可能是同一個延遲,如果我能夠做到這一點,也許使用while()Timer()

我在考慮Timer()以延遲迴憶功能,但我不能撥打OnLButtonDown(),因爲我明白它只有一條消息可以調用它的參數。

回答

1

OnLButtonDown()呼叫SetTimer()開始計時器運行,例如。每100ms。然後添加OnLButtonUp()並呼叫KillTimer()停止定時器運行。然後,在OnTimer()函數中執行您的代碼(將WM_TIMER添加到消息映射中),並且它將在鼠標按下時運行。

請注意,如果用戶在窗口外單擊並拖動鼠標,則會調用OnLButtonDown()而不是OnLButtonUp(),這會使程序認爲鼠標按鈕被卡住。處理這個問題的功能是:在的同時撥打SetTimer()ReleaseCapture(),同時撥打KillTimer(),以保持接收鼠標消息,而不管鼠標位於何處。我建議查找MSDN上這個答案中提到的所有函數,並閱讀它們以獲取更多信息。

1

不要使用while循環,請記住舊的mousestate。

if (oldFlags == MK_LBUTTON && nFlags == MK_LBUTTON) 

你知道用戶按住該按鈕並沒有剛剛點擊的方式。

但是,您可以發送WM消息來欺騙您的應用程序,該按鈕已按下,如果你想。 我不能真正引導你在任何特定的方向,因爲我不知道你想完成什麼; P這是我能從你對我的問題的理解中得到的最好答案。

+0

這似乎是正確的。 – ckv 2010-04-27 06:41:58

+0

它沒有工作,不適合我...... 我想創建一個噴槍效果,這就是爲什麼我需要一次又一次地調用lbnckicked函數,直到我停止按下按鈕... – Erez 2010-04-27 09:02:00

相關問題