COleDataObject用於從一個嵌入OLE項,或從剪貼簿中通過拖放操作,以不同的數據格式存取數據時的數據傳輸。這類數據傳輸具有一個數據源和一個目的地。數據源是實現為一個COleDataSource類。無論目的地套用中是否有存放在內的數據,或從剪貼簿中執行一次貼上操作,都必須建立COleDataObject類的一個對象。
該類使你能夠判定數據是否以一種指定的格式存在。可以列舉可用的數據格式或檢查一個給定的格式是否可用,然後用首選的格式進行數據存取。對象的存取可以用幾種途徑,包括使用一個CFile或一個HGLOBAL或STGMEDIUM結構。
#include
COleDataObject類的成員
構造函式
COleDataObject構造一個COleDataObject對象 |
操作
AttachClipboard粘附在剪貼簿中的數據對象IsDataAvailable檢查數據在指定格式下是否可用GetData用指定的格式從一個附加的OLE數據對象中拷貝數據GetFileData用指定格式從一個附加的OLE數據對象中拷貝數據到一個CFile指針GetGlobalData用指定格式從一個附加的OLE數據對象中拷貝數據到一個HGLOBALBeginEnumFormats為後面一次或多次的GetNextFormat調用作準備GetNextFormat返回下一個可用的格式Attach將指定OLE數據對象附加到COleDataObjectRelease分離並釋放關聯的IDataObject對象Detach分離關聯的IDataObject對象 |
COleDataObject::Attach
void Attach( LPDATAOBJECT lpDataObject, BOOL bAutoRelease = TRUE );
參數:
lpDataObject | 一個OLE數據對象的指針。 |
bAutoRelease | 如果銷毀COleDataObject對象時需釋放OLE數據對象,其值為TRUE;否則為FALSE。 |
說明:
調用該函式將一個OLE 數據對象和COleDataObject對象關聯。
要了解更多的信息,請參閱“OLE 2程式設計師參考(卷1)”中的 IDataObject結構。
COleDataObject::AttachClipboard
BOOL AttachClipboard( );
返回值:如果成功,則返回非零值;否則為0。
說明:
調用該函式貼上一個當前在剪貼簿中的數據對象到COleDataObject對象。
注意:
調用該函式將封鎖剪貼簿直至該數據對象被釋放。數據對象在COleDataObject的 析構函式中釋放。
COleDataObject::BeginEnumFormats
void BeginEnumFormats( );
說明:
調用該函式為後面調用GetNextFormat從項存取一系列數據格式作準備。
調用BeginEnumFormats後,該數據對象支持的第一種格式的位置被 存儲起來,連續地調用GetNextFormat將列舉數據對象的可用格式的序列。要檢查數據在給定格式下的可用性,請使用COleDataObject::IsDataAvailable。
COleDataObject::COleDataObject
COleDataObject( );
說明:
構造一個COleDataObject對象。在調用COleDataObject函式之前,必須先調用COleDataObject::Attach或COleDataObject::AttachClipboard。
注意:
既然拖放操作的其中一個參數是一個COleDataObject的一個指針,無需調用該構造函式來支持拖放操作。
COleDataObject::Detach
LPDATAOBJECT Detach( );
返回值:分離的OLE數據對象的 指針。
說明:
調用該函式將COleDataObject對象從它關聯的OLE數據對象中分離出來,但不釋放數據對象。
COleDataObject::GetData
BOOL GetData( CLIPFORMAT cfFormat, LPSTGMEDIUM lpStgMedium, LP FORMATETC lpFormatEtc = NULL );
返回值:如果成功,則返回非零值;否則為0。
參數:
cfFormat | 數據的返回格式。該參數可以是預定義剪貼簿格式的一種或WindowsRegisterClipboardFormat函式的返回值。 |
lpStgMedium | 接收數據的一個 STGMEDIUM結構。 |
lpFormatEtc | 一個FORMATETC結構的指針,該結構說明數據的返回格式。如果你要在用cfFormat指定的剪貼簿格式外指定另外的格式,給該參數提供一個值。如果該值為NULL, 將使用FORMATETC結構的預設值。 |
說明:
調用該函式以指定格式存取數據。
COleDataObject::GetFileData
CFile* GetFileData( CLIPFORMAT cfFormat, LPFORMATETC lpFormatEtc = NULL );
返回值:
如果成功,則返回一個新的包含數據的CFile或CFile派生類的對象的指針;否則返回NULL。
參數:
cfFormat | 數據的返回格式。該參數可以是預定義剪貼簿格式的一種或WindowsRegisterClipboardFormat函式的返回值。 |
lpFormatEtc | 一個FORMATETC 結構的指針,該結構說明數據的返回格式。如果你要在用cfFormat指定的剪貼簿格式外指定另外的格式,給該參數提供一個值。如果該值為NULL,將使用FORMATETC結構的預設值。 |
說明:
調用該函式創建一個CFile或CFile派生的對象,以指定格式將數據存取到一個CFile指針中。視數據存儲的介質不同,則返回值指向的實際類型可能是CFile, CSharedFile或COleStreamFile。
注意:
該函式返回值存取的CFile對象屬於調用者。應由調用者來刪除CFile數據對象以關閉檔案。
要了解更多的信息,請參閱“OLE 2程式設計師參考(卷1)”中的FORMATETC。要了解更多的信息,請參閱Win32文檔中的RegisterClipboardFormat。
COleDataObject::GetGlobalData
HGLOBAL GetGlobalData( CLIPFORMAT cfFormat, LPFORMATETC lpFormatEtc = NULL );
返回值:
如果成功,則返回包含數據的全局記憶體塊的句柄;否則返回NULL。
參數:
cfFormat | 數據的返回格式。該參數可以是預定義剪貼簿格式的一種或Windows RegisterClipboardFormat函式的返回值。 |
lpFormatEtc | 一個FORMATETC結構的指針,該結構說明數據的返回格式。如果你要在用cfFormat指定的剪貼簿格式外指定另外的格式,給該參數提供一個值。如果該值為NULL, 將使用FORMATETC結構的預設值。 |
說明:
調用該函式分配全局記憶體塊,以指定格式將數據存取到一個HGLOBAL中。
要了解更多的信息,請參閱“OLE 2程式設計師參考(卷1)”中的FORMATETC。
要了解更多的信息,請參閱Win32文檔中的RegisterClipboardFormat。
COleDataObject::GetNextFormat
BOOL GetNextFormat( LPFORMATETC lpFormatEtc );
返回值:
如果有另外格式可用,則返回非零值;否則為0。
參數:
lpFormatEtc | 一個FORMATETC結構指針,用於函式返回時存取格式信息。 |
說明:
重複調用該函式獲取所有從項存取數據的可用格式。
調用BeginEnumFormats後,該數據對象支持的第一種格式的位置被存儲起來,連續地調用GetNextFormat將列舉數據對象的可用格式的序列。
使用這些函式可羅列可用格式。要檢查數據在給定格式下的可用性,請使用COleDataObject::IsDataAvailable。
要了解更多的信息,請參閱“OLE 2程式設計師參考(卷1)”中的IEnumXXXX::Next。
COleDataObject::IsDataAvailable
BOOL IsDataAvailable( CLIPFORMAT cfFormat, LPFORMATETC lpFormatEtc = NULL );
返回值:
若數據在指定格式下可用,則返回非零值;否則為0。
參數:
cfFormat | 數據的返回格式。該參數可以是預定義剪貼簿格式的一種或Windows RegisterClipboardFormat函式的返回值。 |
lpFormatEtc | 一個FORMATETC結構的指針,該結構說明數據的返回格式。如果你要在用cfFormat指定的剪貼簿格式外指定另外的格式,給該參數提供一個值。如果該值為NULL,將使用FORMATETC結構的預設值。 |
說明:
調用該函式判定特定格式是否可用於從OLE 項中存取數據。在調用GetData,GetFileData或GetGlobalData之前調用該函式是十分有用的。
COleDataObject::Release
void Release( );
說明:
調用該函式釋放一個先前和COleDataObject關聯的IDataObject對象的所有權。可以顯式地調用Attach或AttachClipboard 或由 框架將一個IDataObject對象和COleDataObject 關聯。如果Attach 的 bAutoRelease參數為 FALSE, IDataObject對象將不釋放。在這種情形下,調用者有責任使用IUnknown::Release釋放IDataObject。