DoDragDrop 函式 (ole2.h)
執行 OLE 拖放作業。
語法
HRESULT DoDragDrop(
[in] LPDATAOBJECT pDataObj,
[in] LPDROPSOURCE pDropSource,
[in] DWORD dwOKEffects,
[out] LPDWORD pdwEffect
);
參數
[in] pDataObj
包含所拖曳數據之數據物件上 IDataObject 介面的指標。
[in] pDropSource
IDropSource 介面實作的指標,用於在拖曳作業期間與來源通訊。
[in] dwOKEffects
來源在 OLE 拖放作業中允許的效果。 最重要的是,它是否允許移動。 dwOKEffect 和 pdwEffect 參數會從 DROPEFFECT 列舉取得值。 如需值清單,請參閱 DROPEFFECT。
[out] pdwEffect
值的指標,指出 OLE 拖放作業如何影響源數據。 只有在作業未取消時, 才會設定 pdwEffect 參數。
傳回值
此函式會在成功時傳回S_OK。 其他可能的值包括下列專案。
傳回碼 | Description |
---|---|
|
OLE 拖放作業成功。 |
|
已取消 OLE 拖放作業。 |
|
發生未預期的錯誤。 |
備註
如果您要開發可做為 OLE 拖放作業資料源的應用程式,當您偵測到使用者已啟動 OLE 拖放作業時,必須呼叫 DoDragDrop 。
DoDragDrop 函式會進入迴圈,其會在 IDropSource 和 IDropTarget 介面中呼叫各種方法。 (若要成功拖放作業,作為數據源的應用程式也必須實作 IDropSource,而目標應用程式必須實作 IDropTarget.)
- DoDragDrop 函式會決定目前游標位置下的視窗。 然後,它會檢查此視窗是否為有效的置放目標。
- 如果視窗是有效的置放目標, DoDragDrop 會呼叫 IDropTarget::D ragEnter。 這個方法會提供效果代碼,指出實際發生卸除時會發生什麼情況。 如需有效置放效果的清單,請參閱 DROPEFFECT 列舉。
- DoDragDrop 會使用效果程式代碼呼叫 IDropSource::GiveFeedback ,讓置放來源介面可以提供適當的視覺回饋給使用者。 傳遞至 DoDragDrop 的 pDropSource 指標會指定適當的 IDropSource 介面。
-
DoDragDrop 會追蹤滑鼠游標移動,以及鍵盤或滑鼠按鈕狀態的變更。
- 如果使用者移出視窗, DoDragDrop 會呼叫 IDropTarget::D ragLeave。
- 如果滑鼠進入另一個視窗, DoDragDrop 會判斷該視窗是否為有效的置放目標,然後針對該視窗呼叫 IDropTarget::D ragEnter 。
- 如果滑鼠移動但停留在相同的視窗中, DoDragDrop 會呼叫 IDropTarget::D ragOver。
-
如果鍵盤或滑鼠按鈕狀態有所變更, DoDragDrop 會呼叫 IDropSource::QueryContinueDrag ,並判斷是否要繼續拖曳、卸除數據,或根據傳回值取消作業。
- 如果傳回值 S_OK,DoDragDrop 會先呼叫 IDropTarget::D ragOver 以繼續作業。 這個方法會傳回新的效果值,而 DoDragDrop 接著會以新的效果呼叫 IDropSource::GiveFeedback ,以便設定適當的視覺回饋。 如需有效置放效果的清單,請參閱 DROPEFFECT 列舉。 IDropTarget::D ragOver 和 IDropSource::GiveFeedback 會配對,如此一來,當滑鼠在置放目標上移動時,使用者會收到最新的滑鼠位置意見反應。
- 如果傳回值 DRAGDROP_S_DROP,DoDragDrop 會呼叫 IDropTarget::D rop。 DoDragDrop 函式會將最後一個效果程式代碼傳回至來源,因此來源應用程式可以在源數據上執行適當的作業,例如,如果作業是移動,請剪下數據。
- 如果傳回值 DRAGDROP_S_CANCEL,DoDragDrop 函式會呼叫 IDropTarget::D ragLeave。
若要支持觸控或手寫筆輸入,請勿從觸控處理程式呼叫 DoDragDrop 。 相反地,請從處理程式呼叫 DoDragDrop ,以取得系統在觸控輸入時合成的滑鼠訊息。
應用程式可以藉由呼叫 GetMessageExtraInfo 函式來識別合成的訊息。 如需使用 GetMessageExtraInfo 區分滑鼠輸入和 Windows Touch 輸入的詳細資訊,請參閱 疑難解答應用程式。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | ole2.h |
程式庫 | Ole32.lib |
Dll | Ole32.dll |