IOleInPlaceObjectWindowless::GetDropTarget 方法 (ocidl.h)
擷取支援拖放之就地使用中無窗口物件的 IDropTarget 介面。
語法
HRESULT GetDropTarget(
[out] IDropTarget **ppDropTarget
);
參數
[out] ppDropTarget
IDropTarget 指標變數的指標,可接收無視窗對象的介面指標。
傳回值
此方法會在成功時傳回S_OK。 其他可能的傳回值包括下列專案。
傳回碼 | Description |
---|---|
|
無視窗物件不支援拖放。 |
備註
視窗化物件會藉由呼叫 RegisterDragDrop 函式並提供其視窗句柄做為參數來註冊其 IDropTarget 介面。 註冊其 IDropTarget 介面可讓對象參與拖放作業。 因為它在使用中時沒有視窗,所以無視窗對象無法註冊其 IDropTarget 介面。 因此,它無法直接參與拖放作業,而不需要其容器的支援。
在涉及無視窗物件的拖放作業期間,會發生下列事件:
- 容器會透過 RegisterDragDrop 函式註冊自己的 IDropTarget 介面。
- 在容器本身 IDropTarget::D ragEnter 或 IDropTarget::D ragOver 方法的實作中,容器會偵測滑鼠指標是否剛進入內嵌物件。
- 如果物件為非使用中,容器會呼叫物件的 IPointerInactive::GetActivationPolicy 方法。 對象會傳回POINTERINACTIVE_ACTIVATEONDRAG旗標。 容器接著會就地啟動物件。 如果對象已經在使用中,容器就不需要執行此步驟。
- 物件作用中之後,容器必須接著取得物件的 IDropTarget 介面。
- 希望成為置放目標的無視窗物件仍會實作 IDropTarget 介面,但不會註冊它,也不會透過 對 IUnknown::QueryInterface 的呼叫傳回它。 相反地,容器可以藉由呼叫物件的 IOleInPlaceObjectWindowless::GetDropTarget 方法來取得此介面。 如果物件想要參與拖放作業,物件會傳回其本身 IDropTarget 介面的指標。 容器可以快取此介面指標以供稍後使用。 例如,在後續呼叫容器的 IDropTarget::D ragEnter 或 IDropTarget::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 ragEnter 的後續呼叫,而不需要任何 IDropTarget::D ragLeave 。 事實上,如果在下次呼叫容器的 IDropTarget::D ragOver 期間,滑鼠仍然位於相同的物件上,容器可能會決定嘗試並在物件上再次呼叫 IDropTarget::D ragEnter 。
來電者附註
容器可以快取物件 之 IDropTarget 介面的指標,以供稍後使用。規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | ocidl.h |