COleDataObject
COleDataObject没有基类。 COleDataObject用于从一个嵌入OLE项,或从剪贴板中通过拖放操作,以不同的数据格式存取数据时的数据传输。这类数据传输具有一个数据源和一个目的地。数据源是实现为一个COleDataSource类。无论目的地应用中是否有存放在内的数据,或从剪贴板中执行一次粘贴操作,都必须建立COleDataObject类的一个对象。 该类使你能够判定数据是否以一种指定的格式存在。可以列举可用的数据格式或检查一个给定的格式是否可用,然后用首选的格式进行数据存取。对象的存取可以用几种途径,包括使用一个CFile或一个HGLOBAL或STGMEDIUM结构。 #include <afxole.h> 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, LPFORMATETC 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。
分享到:
相关推荐
5. **获取剪贴板数据**:如果要从剪贴板读取数据,可以使用CClipboard::IsDataAvailable检查是否存在特定格式的数据,然后用COleDataObject获取数据。例如,可以创建一个COleDataObject对象,通过它的...
DROPEFFECT CMyListCtrl::OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) { // 处理拖动进入逻辑... } DROPEFFECT CMyListCtrl::OnDragOver(COleDataObject* pDataObject, DWORD ...
在Drop方法中,你可以使用COleDataObject的SetData方法来获取数据,并将其插入到目标列表控件中。 对于“程序只能有一个进程”的概念,这是操作系统的基本原理。在Windows系统中,每个正在执行的程序都会对应一个...
3. **COleDataObject**:在拖放操作中,数据通常以数据对象的形式存在,这就是COleDataObject的作用。你可以将需要拖放的数据绑定到这个对象上,然后在拖放过程中,数据就会随着鼠标一起移动。 对于“拼图游戏”来...
你可以将文件路径或其他数据附加到`COleDataObject`,并使用`SetData`函数设置数据格式,比如CF_HDROP(用于处理文件拖放)。 5. **RegisterDragDrop和RevokeDragDrop**: 调用`RegisterDragDrop`函数将窗口注册为...
总结来说,`CRichEditCtrl`提供了一个强大的富文本编辑环境,通过处理`EM_COPY`和`EM_PASTE`消息可以实现基本的拷贝和粘贴功能,而结合`COleDataObject`和`COleClipboard`则能处理RTF格式的数据。此外,`...
3. **创建COleDataObject对象**:拖动的数据需要封装在一个COleDataObject对象中,你可以将要拖动的列表项信息存储在这个对象的数据成员中。这通常涉及设置CF_HDROP格式的数据,它是Windows中用于处理文件拖放的标准...
void CMyTreeCtrl::OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) { // 处理拖进入事件... } void CMyTreeCtrl::OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint...
virtual DROPEFFECT OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point); virtual DROPEFFECT OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point); virtual void...
在MFC中,可以使用COleDataObject和COleClipboard类来操作剪贴板。首先,数据发送方将数据放置到剪贴板上,然后数据接收方从剪贴板中读取数据。具体步骤如下: 1. 创建COleDataObject对象,绑定要交换的数据。 2. ...
4. **数据交换**:在OnDrop函数中,通过调用COleDataObject::FromGlobal获取拖放的数据,并进行相应的处理。通常,数据以 IDataObject 接口的形式传递,包含多种格式的数据,如CF_HDROP,用于处理文件拖放。 5. **...
要将数据写入剪切板,首先需要创建一个数据对象,如`COleDataObject`,然后将数据附着到该对象上。对于文本,可以使用`SetData`函数,传入CF_TEXT格式和待复制的文本。之后,调用`CClipboard::Open`,然后调用`...
在MFC应用中,我们可以使用COleDropTarget、COleDropSource和COleDataObject等类来支持这一功能。以下是对这些关键类的详细解释: 1. **COleDropTarget**:这个类代表一个可以接收拖放操作的目标对象。你需要在你的...
这主要包括COleDropSource、COleDropTarget、COleDataSource和COleDataObject等。COleDropSource处理拖动的开始和结束,以及在拖动过程中可能发生的用户交互;COleDropTarget则处理目标对象接收拖放数据的行为;...
COleDataSource用于封装要拖放的数据,而COleDataObject则帮助你将数据与特定的格式关联起来,这样接收端才能正确解析。 总结起来,Visual C++ OLE拖放涉及的知识点包括: 1. OLE技术基础:了解对象链接和嵌入的...
5. **COleDataSource和COleDataObject**:这两个类用于处理拖放的数据。COleDataSource是数据源,负责包装要拖放的数据;COleDataObject则用于从剪贴板或数据源获取数据。在这个程序中,可能用到COleDataObject来...
在`OnBeginRDrag`或`OnBeginDrag`中,你需要创建一个`COleDataObject`实例,然后将Tree Control项的数据(如其文本或自定义数据)附着到该对象。这可以通过调用`COleDataObject::SetData`来实现。 4. **实现拖放...
DROPEFFECT CMyView::OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) { // ... } DROPEFFECT CMyView::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint ...
在`OnDragEnter`和`OnDrop`函数中,我们可以创建一个`COleDataObject`实例,然后尝试从拖放的数据中检索所需的格式(如CF_HDROP,表示文件路径列表)。 4. **处理拖放事件**: 在`OnDrop`函数中,我们解析从`...