假定有一個源視窗,簡稱Win_S。要滑鼠左鍵拖動到的目的視窗,簡稱Win_D。桌面上其它視窗和位置,簡稱Win_O。滑鼠的游標(cursor)形狀,如果是進入目的視窗Win_D,游標形狀簡稱為Cursor_OK,如果是其它視窗Win_O(還包括源視窗Win_S),游標形狀簡稱為Cursor_NO,無拖放的正常滑鼠游標形狀簡稱為Cursor_Normal。
現在的問題是:拖動發生后,1、如果在Win_S中不捕獲滑鼠,則Win_S不能檢測到滑鼠移出Win_S后(包括滑鼠到Win_D和Win_O)的滑鼠左鍵釋放(彈起)的訊息,把游標恢復為Cursor_Normal;2、如果在Win_S中捕獲滑鼠,這樣雖然可以在滑鼠左鍵在任意位置釋放(彈起)后恢復游標形狀Cursor_Normal,但這種情況下,拖動期間,其它視窗(Win_D和Win_O),則不能回應滑鼠訊息,Win_D中也就不能根據拖放到此而回應事件了。
這個兩難問題應該是一個標準的滑鼠跨視窗拖、放操作遇到的典型問題,請解決過類似問題的朋友提供些幫助。
uj5u.com熱心網友回復:
視窗有滑鼠離開訊息,只是需要手動回應而已uj5u.com熱心網友回復:
對于源視窗Win_S,回應滑鼠離開訊息是不能滿足要求的,因為滑鼠離開Win_S,拖放動作還沒有結束,滑鼠可能在拖動狀態下進入Win_D或Win_O,也可能再到Win_S中,只有在滑鼠釋放(左鍵彈起),才是拖動事件的結束。
uj5u.com熱心網友回復:
你其實需要的是全域變數的操作
而且要多載主框架的PreTranslateMessage來操作
uj5u.com熱心網友回復:
視窗有滑鼠離開訊息,只是需要手動回應而已
對于源視窗Win_S,回應滑鼠離開訊息是不能滿足要求的,因為滑鼠離開Win_S,拖放動作還沒有結束,滑鼠可能在拖動狀態下進入Win_D或Win_O,也可能再到Win_S中,只有在滑鼠釋放(左鍵彈起),才是拖動事件的結束。
你其實需要的是全域變數的操作
而且要多載主框架的PreTranslateMessage來操作
多載主框架的PreTranslateMessage也不見得可行,滑鼠拖放的時候,可能會出現移出主框架視窗的范圍,即前面的Win_O,此時釋放(結束拖動),拖動源視窗仍能回應該釋放訊息,當然這是一次不成功的拖放。
uj5u.com熱心網友回復:
OLE drag and dropuj5u.com熱心網友回復:
OLE drag and drop
不錯,我在網上也搜到要用 OLE drag and drop,研究一下,看看能不能滿足我的要求。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/254156.html
標籤:界面
