共用方式為


IOleInPlaceObjectWindowless::GetDropTarget 方法 (ocidl.h)

擷取支援拖放之就地使用中無窗口物件的 IDropTarget 介面。

語法

HRESULT GetDropTarget(
  [out] IDropTarget **ppDropTarget
);

參數

[out] ppDropTarget

IDropTarget 指標變數的指標,可接收無視窗對象的介面指標。

傳回值

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

傳回碼 Description
E_NOTIMPL
無視窗物件不支援拖放。

備註

視窗化物件會藉由呼叫 RegisterDragDrop 函式並提供其視窗句柄做為參數來註冊其 IDropTarget 介面。 註冊其 IDropTarget 介面可讓對象參與拖放作業。 因為它在使用中時沒有視窗,所以無視窗對象無法註冊其 IDropTarget 介面。 因此,它無法直接參與拖放作業,而不需要其容器的支援。

在涉及無視窗物件的拖放作業期間,會發生下列事件:

  • 容器會透過 RegisterDragDrop 函式註冊自己的 IDropTarget 介面。
  • 在容器本身 IDropTarget::D ragEnterIDropTarget::D ragOver 方法的實作中,容器會偵測滑鼠指標是否剛進入內嵌物件。
  • 如果物件為非使用中,容器會呼叫物件的 IPointerInactive::GetActivationPolicy 方法。 對象會傳回POINTERINACTIVE_ACTIVATEONDRAG旗標。 容器接著會就地啟動物件。 如果對象已經在使用中,容器就不需要執行此步驟。
  • 物件作用中之後,容器必須接著取得物件的 IDropTarget 介面。
  • 希望成為置放目標的無視窗物件仍會實作 IDropTarget 介面,但不會註冊它,也不會透過 對 IUnknown::QueryInterface 的呼叫傳回它。 相反地,容器可以藉由呼叫物件的 IOleInPlaceObjectWindowless::GetDropTarget 方法來取得此介面。 如果物件想要參與拖放作業,物件會傳回其本身 IDropTarget 介面的指標。 容器可以快取此介面指標以供稍後使用。 例如,在後續呼叫容器的 IDropTarget::D ragEnterIDropTarget::D ragLeave 方法時,容器可以使用快取的指標,而不是再次呼叫物件的 GetDropTarget 方法。
  • 容器接著會呼叫物件的 IDropTarget::D ragEnter,並從自己的 IDropTarget::D ragOver 或 IDropTarget::D ragEnter 方法傳遞 pdwEffect 的傳回值。 從此時開始,容器會將所有後續 的 IDropTarget::D ragOver 呼叫轉送至無窗口物件,直到滑鼠離開物件或卸除對象為止。 如果滑鼠離開物件,容器會呼叫物件的 IDropTarget::D ragLeave ,然後釋放物件的 IDropTarget 介面。 如果發生卸除,容器會將 IDropTarget::D rop 呼叫轉送至 物件。
  • 最後,容器就地會停用 物件。
物件可以從自己的 IDropTarget::D ragEnter 傳回S_FALSE,表示它不接受數據物件中的任何數據格式。 在此情況下,容器可以決定接受本身的數據,並從自己的 IDropTarget::D ragEnterIDropTarget::D ragOver 方法傳回適當的 dwEffect

IDropTarget::D ragEnter 傳回S_FALSE的對象應該準備好在兩者之間接收 IDropTarget::D ragEnter 的後續呼叫,而不需要任何 IDropTarget::D ragLeave 。 事實上,如果在下次呼叫容器的 IDropTarget::D ragOver 期間,滑鼠仍然位於相同的物件上,容器可能會決定嘗試並在物件上再次呼叫 IDropTarget::D ragEnter

來電者附註

容器可以快取物件 之 IDropTarget 介面的指標,以供稍後使用。

規格需求

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

另請參閱

IDropTarget

IOleInPlaceObjectWindowless

IPointerInactive::GetActivationPolicy

RegisterDragDrop