DoDragDrop 函式 (ole2.h)

執行 OLE 拖放作業。

注意 您必須先呼叫 OleInitialize ,才能呼叫此函式。
 

語法

HRESULT DoDragDrop(
  [in]  LPDATAOBJECT pDataObj,
  [in]  LPDROPSOURCE pDropSource,
  [in]  DWORD        dwOKEffects,
  [out] LPDWORD      pdwEffect
);

參數

[in] pDataObj

包含所拖曳數據之數據物件上 IDataObject 介面的指標。

[in] pDropSource

IDropSource 介面實作的指標,用於在拖曳作業期間與來源通訊。

[in] dwOKEffects

來源在 OLE 拖放作業中允許的效果。 最重要的是,它是否允許移動。 dwOKEffectpdwEffect 參數會從 DROPEFFECT 列舉取得值。 如需值清單,請參閱 DROPEFFECT

[out] pdwEffect

值的指標,指出 OLE 拖放作業如何影響源數據。 只有在作業未取消時, 才會設定 pdwEffect 參數。

傳回值

此函式會在成功時傳回S_OK。 其他可能的值包括下列專案。

傳回碼 Description
DRAGDROP_S_DROP
OLE 拖放作業成功。
DRAGDROP_S_CANCEL
已取消 OLE 拖放作業。
E_UNSPEC
發生未預期的錯誤。

備註

如果您要開發可做為 OLE 拖放作業資料源的應用程式,當您偵測到使用者已啟動 OLE 拖放作業時,必須呼叫 DoDragDrop

DoDragDrop 函式會進入迴圈,其會在 IDropSource 和 IDropTarget 介面中呼叫各種方法。 (若要成功拖放作業,作為數據源的應用程式也必須實作 IDropSource,而目標應用程式必須實作 IDropTarget.)

  1. DoDragDrop 函式會決定目前游標位置下的視窗。 然後,它會檢查此視窗是否為有效的置放目標。
  2. 如果視窗是有效的置放目標, DoDragDrop 會呼叫 IDropTarget::D ragEnter。 這個方法會提供效果代碼,指出實際發生卸除時會發生什麼情況。 如需有效置放效果的清單,請參閱 DROPEFFECT 列舉。
  3. DoDragDrop 會使用效果程式代碼呼叫 IDropSource::GiveFeedback ,讓置放來源介面可以提供適當的視覺回饋給使用者。 傳遞至 DoDragDroppDropSource 指標會指定適當的 IDropSource 介面。
  4. DoDragDrop 會追蹤滑鼠游標移動,以及鍵盤或滑鼠按鈕狀態的變更。
  5. 如果鍵盤或滑鼠按鈕狀態有所變更, DoDragDrop 會呼叫 IDropSource::QueryContinueDrag ,並判斷是否要繼續拖曳、卸除數據,或根據傳回值取消作業。
    • 如果傳回值 S_OK,DoDragDrop 會先呼叫 IDropTarget::D ragOver 以繼續作業。 這個方法會傳回新的效果值,而 DoDragDrop 接著會以新的效果呼叫 IDropSource::GiveFeedback ,以便設定適當的視覺回饋。 如需有效置放效果的清單,請參閱 DROPEFFECT 列舉。 IDropTarget::D ragOverIDropSource::GiveFeedback 會配對,如此一來,當滑鼠在置放目標上移動時,使用者會收到最新的滑鼠位置意見反應。
    • 如果傳回值 DRAGDROP_S_DROP,DoDragDrop 會呼叫 IDropTarget::D ropDoDragDrop 函式會將最後一個效果程式代碼傳回至來源,因此來源應用程式可以在源數據上執行適當的作業,例如,如果作業是移動,請剪下數據。
    • 如果傳回值 DRAGDROP_S_CANCEL,DoDragDrop 函式會呼叫 IDropTarget::D ragLeave
當您處理觸控或手寫筆輸入時,DoDragDrop 不支援叫用拖放支援。

若要支持觸控或手寫筆輸入,請勿從觸控處理程式呼叫 DoDragDrop 。 相反地,請從處理程式呼叫 DoDragDrop ,以取得系統在觸控輸入時合成的滑鼠訊息。

應用程式可以藉由呼叫 GetMessageExtraInfo 函式來識別合成的訊息。 如需使用 GetMessageExtraInfo 區分滑鼠輸入和 Windows Touch 輸入的詳細資訊,請參閱 疑難解答應用程式

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 ole2.h
程式庫 Ole32.lib
Dll Ole32.dll

另請參閱

IDropSource