分享方式:


資料物件和資料來源:管理

建立資料物件或資料來源之後,您可以對資料執行許多常見作業,例如插入和移除資料、列舉資料的格式等等。 本文說明完成最常見作業所需的技術。 主題包括:

將資料插入資料來源

資料插入資料來源的方式取決於資料是立即提供還是隨選提供,以及提供媒體的資料。 可能性如下。

立即提供資料 (立即轉譯)

  • 針對您提供資料的每個剪貼簿格式重複呼叫 COleDataSource::CacheGlobalData 。 傳遞要使用的剪貼簿格式、包含資料的記憶體控制碼, 以及選擇性地傳遞描述資料的 FORMATETC 結構。

    -或-

  • 如果您想要直接使用 STGMEDIUM 結構,請在上述選項中呼叫 COleDataSource::CacheData 而不是 COleDataSource::CacheGlobalData

視需要提供資料(延遲轉譯)

這是進階主題。

  • 針對您提供資料的每個剪貼簿格式重複呼叫 COleDataSource::DelayRenderData 。 傳遞要使用的剪貼簿格式,並選擇性地 傳遞描述資料的 FORMATETC 結構。 要求資料時,架構會呼叫 COleDataSource::OnRenderData ,您必須覆寫此架構。

    -或-

  • 如果您使用 物件來提供資料,請呼叫 , COleDataSource::DelayRenderData 而不是在上一 CFile 個選項中呼叫 COleDataSource::DelayRenderFileData 。 要求資料時,架構會呼叫 COleDataSource::OnRenderFileData ,您必須覆寫此架構。

判斷資料物件中可用的格式

在應用程式允許使用者將資料貼入其中之前,它必須知道剪貼簿上是否有可處理的格式。 若要這樣做,您的應用程式應該執行下列動作:

  1. 建立 COleDataObject 物件和 FORMATETC 結構。

  2. 呼叫資料物件 AttachClipboard 的成員函式,以將資料物件與剪貼簿上的資料產生關聯。

  3. 執行下列其中一個動作:

    • 如果只需要一或兩種格式,請呼叫資料物件 IsDataAvailable 的成員函式。 如果剪貼簿上的資料比應用程式支援的格式要高得多,這可節省您的時間。

      -或-

    • 呼叫資料物件 BeginEnumFormats 的成員函式,開始列舉剪貼簿上可用的格式。 然後呼叫 GetNextFormat ,直到剪貼簿傳回應用程式支援的格式,或沒有其他格式。

如果您使用 ON_UPDATE_COMMAND_UI ,您現在可以在 [編輯] 功能表上啟用 [貼上] 和 [貼上特殊專案]。 若要這樣做,請呼叫 CMenu::EnableMenuItemCCmdUI::Enable 。 如需容器應用程式應該使用功能表項目和時機執行哪些動作的詳細資訊,請參閱 功能表和資源:容器新增

從資料物件擷取資料

一旦您決定資料格式之後,剩下的就是從資料物件擷取資料。 若要這樣做,使用者會決定放置資料的位置,而應用程式會呼叫適當的函式。 資料將在下列其中一種媒體中提供:

要呼叫的函式
全域記憶體 ( HGLOBAL COleDataObject::GetGlobalData
檔案 ( CFile COleDataObject::GetFileData
STGMEDIUM 結構 ( IStorage COleDataObject::GetData

通常,媒體會連同其剪貼簿格式一起指定。 例如, CF_EMBEDDEDSTRUCT 物件一律在需要 STGMEDIUM 結構的媒體中 IStorage 。 因此,您會使用 GetData ,因為它是唯一可以接受 STGMEDIUM 結構的其中一個 函式。

若剪貼簿格式為 IStreamHGLOBAL 中型,架構可以提供 CFile 參考資料的指標。 然後,應用程式可以使用檔案讀取來取得資料的方式與從檔案匯入資料的方式大致相同。 基本上,這是資料來源中 和 OnRenderFileData 常式的用戶端介面 OnRenderData

使用者現在可以將資料插入檔中,就像使用相同格式的任何其他資料一樣。

您想要深入瞭解什麼

另請參閱

資料物件和資料來源 (OLE)
COleDataObject 類別
COleDataSource 類別