Share via


IDataObject::EnumFormatEtc 方法 (objidl.h)

建立物件以列舉數據物件所支援的格式。

語法

HRESULT EnumFormatEtc(
  [in]  DWORD          dwDirection,
  [out] IEnumFORMATETC **ppenumFormatEtc
);

參數

[in] dwDirection

數據的方向。 可能的值來自 DATADIR 列舉。

值DATADIR_GET列舉可以傳入 IDataObject::GetData 呼叫的格式。 值DATADIR_SET列舉可以傳入 IDataObject::SetData 呼叫的格式。

[out] ppenumFormatEtc

IEnumFORMATETC 指標變數的指標,可接收新列舉值物件的介面指標。

傳回值

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

傳回碼 Description
E_INVALIDARG
提供的 dwDirection 無效。
E_OUTOFMEMORY
此作業可用的記憶體不足。
E_NOTIMPL
不支援 dwDirection 所指定的方向。
OLE_S_USEREG
要求 OLE 列舉登錄中的格式。

備註

EnumFormatEtc 會建立列舉值物件,可用來判斷數據物件在 FORMATETC 結構中描述數據的所有方式,並提供其 IEnumFORMATETC 介面的指標。 這是其中一個標準列舉值介面。

來電者附註

取得指標之後,呼叫端可以藉由呼叫 IEnumFORMATETC 的列舉方法來列舉 FORMATETC 結構。 由於格式可能會隨著時間而變更,因此目前不支援列舉格式,因為格式可能會隨著時間而變更。 因此,應用程式應該將列舉視為可傳遞之格式類型的提示。 呼叫端負責在列舉值完成時呼叫 Release

發生下列其中一個動作時,會呼叫 EnumFormatEtc

  • 應用程式會呼叫 OleSetClipboard。 OLE 必須判斷剪貼簿上要放置哪些數據,以及是否需要在剪貼簿上放置 OLE 1 相容性格式。
  • 數據會從剪貼簿貼上或卸除。 應用程式會使用第一個可接受的格式。
  • [ 貼上特殊] 對話框隨即顯示。 目標應用程式會從 FORMATETC 專案建置格式清單。

實作者的注意事項

格式可以在登錄中以靜態方式註冊,或在物件初始化期間動態註冊。 如果物件具有未變更的格式清單,而且這些格式已在登錄中註冊,OLE 會提供 FORMATETC 列舉對象的實作,該物件可以列舉登錄中特定 CLSID 下註冊的格式。 其 IEnumFORMATETC 介面的指標可透過呼叫協助程式函式 OleRegEnumFormatEtc 來取得。 因此,在此情況下,您只要呼叫此函式即可實作 EnumFormatEtc 方法。

EXE 應用程式可以實作 方法來傳回值OLE_S_USEREG,以有效地執行相同的動作。 這個傳回值會指示默認對象處理程式呼叫 OleRegEnumFormatEtc。 實作為 DLL 物件應用程式的物件應用程式無法傳回OLE_S_USEREG,因此必須直接呼叫 OleRegEnumFormatEtc

如果是向登錄中的 RequestDataFormats 或 SetDataFormats 機碼註冊,則可以列舉 OLE 1 物件的私用格式。 此外,如果 OLE 物件是使用 GetDataFormats 或 SetDataFormats 金鑰註冊,則可以列舉 OLE 物件 (OLE 1) 之後的所有版本。

對於伺服器未在登錄中註冊 RequestDataFormats 或 SetDataFormats 資訊的 OLE 1 物件, 對 EnumFormatE DATADIR_GET tc 的呼叫只會列舉原生和元檔格式,不論它們是否支持這些格式或其他格式。 呼叫 EnumFormatEtc 傳遞這類物件上的DATADIR_SET只會列舉原生,而不論物件是否支援以其他格式設定。

列舉所傳回 的 FORMATETC 結構通常表示 null 目標裝置 (ptd) 。 這很適合,因為與 FORMATETC 的其他成員不同,目標裝置不會參與對象的決策,因為其是否可以接受或提供 SetData 或 GetData 呼叫中的數據。

FORMATETCtymed 成員通常表示可接受一種以上的儲存媒體。 您應該一律使用布爾 OR 運算符來遮罩並測試此專案。

規格需求

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

另請參閱

FORMATETC

IDataObject::GetData

IDataObject::SetData

IEnumFORMATETC

OleRegEnumFormatEtc