資料物件和資料來源: 操作
建立資料物件或資料來源之後,您可以執行一些常見的作業上的資料,例如插入和移除資料、 列舉資料的格式及其他。 本文將說明完成大多數作業所需的技巧。 主題包括:
將資料插入至資料來源
決定所提供的資料物件中的格式
從資料物件擷取資料
將資料插入至資料來源
資料插入資料來源的方式取決於資料是否立即提供或者視情況下,並以何種媒體會提供。 可能性如下所示。
立即提供資料 (立即轉譯)
呼叫COleDataSource::CacheGlobalData重複地為您提供資料的每一種剪貼簿格式。 將剪貼簿格式,才能使用,包含資料的記憶體的控制代碼,並選擇性地 FORMATETC 結構描述資料。
-或-
如果您想要直接使用 STGMEDIUM 結構,呼叫COleDataSource::CacheData而不是COleDataSource::CacheGlobalData在上述選項。
提供的資料 (延遲轉譯)
這是進階的主題。
呼叫COleDataSource::DelayRenderData重複地為您提供資料的每一種剪貼簿格式。 傳遞要使用的剪貼簿格式,並選擇性地 FORMATETC 結構描述的資料。 當要求資料時,架構會呼叫COleDataSource::OnRenderData,您必須覆寫。
-或-
如果您使用CFile物件,以便提供資料時,呼叫COleDataSource::DelayRenderFileData而不是COleDataSource::DelayRenderData在上一個選項。 當要求資料時,架構會呼叫COleDataSource::OnRenderFileData,您必須覆寫。
決定所提供的資料物件中的格式
應用程式可讓使用者貼上資料之前,它需要知道它可以處理的剪貼簿上是否有格式。 若要這樣做,您的應用程式應該執行下列作業:
建立COleDataObject物件,並 FORMATETC 結構。
呼叫資料物件的AttachClipboard成員函式來將資料物件與剪貼簿上的資料相關聯。
執行下列任一步驟:
呼叫資料物件的IsDataAvailable成員函式如果只有一個或是兩個格式化您的需要。 這會節省您的時間情況下,[剪貼簿] 上的資料支援格式遠多於您的應用程式中。
-或-
呼叫資料物件的BeginEnumFormats成員函式,若要開始列舉所提供的 [剪貼簿] 的格式。 然後呼叫GetNextFormat直到傳回 [剪貼簿] 的格式應用程式支援或有沒有更多的格式。
如果您使用ON_UPDATE_COMMAND_UI,您現在可以啟用貼上和,可能是,在 [編輯] 功能表上的選擇性貼上項目。 若要這樣做,請呼叫其中一個CMenu::EnableMenuItem或CCmdUI::Enable。 如需有關哪個容器應用程式應該如何處理功能表項目和時間,請參閱功能表和資源: 容器加入。
從資料物件擷取資料
一旦您決定資料格式,就要從資料物件擷取資料。 若要執行這項操作,使用者會決定資料中,放置處,應用程式會呼叫適當的函式。 資料會是其中一個可用的下列媒體:
中 |
若要呼叫的函式 |
---|---|
全域記憶體 (HGLOBAL) |
COleDataObject::GetGlobalData |
File (CFile) |
COleDataObject::GetFileData |
STGMEDIUM 結構 (IStorage) |
COleDataObject::GetData |
一般來說,媒體將會指定連同它的剪貼簿格式。 例如, CF_EMBEDDEDSTRUCT 物件會永遠在IStorage需要中度 STGMEDIUM 結構。 因此,您可以使用GetData因為它是可以接受這些函式的唯一地 STGMEDIUM 結構。
情況下,剪貼簿檔案格式中的IStream或HGLOBAL的架構可以提供中級, CFile參照該資料的指標。 應用程式就可以使用讀取的檔案來取得資料太多相同的方式,因為它可能會從檔案匯入資料。 基本上,這種用戶端介面,以OnRenderData和OnRenderFileData的資料來源中的常式。
使用者可以現在就像任何其他資料相同的格式將資料插入文件一樣。