2013-01-23 21 views
0

我的項目中有一個COleControl對象。 在這個COleControl中,我有一個CRectTracker對象。COleControl中未處理的LButtonUp窗口消息

我想處理WM_LButtonUp的窗口消息(事件)。 (當用戶停止按下鼠標左鍵時)。

在我.h文件中我寫道:

afx_msg void OnLButtonUp(UINT nFlags, CPoint point); 

在我的.cpp文件,在

BEGIN_MESSAGE_MAP(CMyControl, COleControl) 

我加

ON_WM_LBUTTONUP() 

然後我開發的

的方法
void CMyControl::OnLButtonUp(UINT nFlags, CPoint point) 

我對windows消息LButtonDown做了同樣的事情。

當我離開鼠標左鍵在我的控制,方法獲取句柄,一切工作正常。 當鼠標跟蹤器位於CRectTracker對象上時,我離開鼠標左鍵時會出現問題。在這種情況下,鼠標LButtonUp消息不會得到處理。

我試圖使用Spy ++,我可以看到Windows消息WM_LButtonUp存在並按預期發生。但它是我的代碼,它沒有得到處理(只是在CRectTracker的鼠標的情況下)。

即使當鼠標位於CRectTracker上時按下鼠標按鈕,LButtonDown事件也會始終處理成功。

LButtonUp消息有什麼問題?

感謝

回答

0

就是說的跟蹤器的工作方式只是一個不可避免的副作用。一旦你點擊跟蹤器或其中一個尺寸控制手柄,MFC就會捕捉鼠標並啓動一個模態消息循環。哪個將會選擇鼠標移動和按鈕消息來實現跟蹤操作。該循環不會退出,直到看到左側按鈕消息,看到退出鍵或捕捉丟失。因此,OnLButtonUp()函數在該循環處於活動狀態時無法運行,該消息在被分派之前被攔截。

您需要以不同方式執行此操作,而不是依賴OnLButtonUp()。很難給出具體的建議,因爲你沒有描述你爲什麼需要它。模態循環的源代碼位於atlmfc/src/mfc/trckrect.cpp,CRectTracker :: TrackHandle()中,如果您需要更多的瞭解。