我已經通過派生自COleDataSource和COleDropTarget實現了我的自定義拖動&刪除。 Everythings工作正常,但我有一個場景,使應用程序崩潰。COleDataSource/COleDropTarget取消拖放操作
當拖放控件放置的對話框被放置時,會發生這種情況,而用戶處於拖動操作的中間時會被銷燬。 這是不正常的,因爲通常要關閉一個對話框,用戶必須使用鼠標或鍵盤,然後拖動操作被自動取消。但是在這種情況下,由於外部條件(改變視圖的自定義消息),可以關閉對話框,然後拖放操作不會被取消。
所以我的問題是,我怎樣才能以編程方式取消拖動操作&? 該操作從調用COleDataSource :: DoDragDrop的OnLButtonDown消息句柄開始。
更新:
我使用DelayRender實施並繼續崩潰。這是兩個斷言我得到:
- 當鼠標指針(拖動)是是一種COleDropTarget派生的類的控制的內部。
alt text http://www.freeimagehosting.net/uploads/b34a62c5ac.jpg
斷言是在撤消方法,這是行:
ASSERT(m_lpDataObject == NULL);
- 當鼠標指針是不是一個內部COleDropTarget-派生類。
alt text http://www.freeimagehosting.net/uploads/a0e8298490.jpg
在此情況下斷言是在COleDataSource的破壞(實際上它是在它的父類CCmdTarget的)。在這一行:
ASSERT(m_dwRef <= 1);
在此先感謝!
你要拖動什麼樣的數據?你在使用COleDataSource :: DelayRenderData()和COleDataSource :: OnRenderData()嗎? – 2009-11-05 20:29:55
不,我不是。我正在使用CacheGlobalData和GetGlobalData。你能舉一個關於DelayRenderData如何工作的例子嗎? – 2009-11-06 07:36:32