剪贴板:使用OLE剪贴板结构

OLE 使用标准格式和某些 OLE 特定格式传输数据的通过剪贴板。

在剪切或复制从应用程序中的数据时,数据在粘贴操作之后要使用的剪贴板上存储。 此数据以多种格式。 当用户选择从剪贴板粘贴的数据时,应用程序可以选择使用哪些格式。 应编写应用程序选择提供多数信息的格式,因此,除非用户专门请求特定的格式,使用 " 粘贴特定,。 在继续之前,您可能需要读取 数据对象和数据源 (OLE) 主题。 会在应用程序描述基础数据传输工作方式以及如何实现它们。

窗口定义可用于传输数据使用剪贴板的许多标准格式。 其中包括图元文件、文本,位图和其他语言。 OLE 定义了许多的 OLE 特定格式,。 对于比这些标准格式为需要更多详细信息的应用程序,最好注册自己的自定义剪贴板格式。 使用 Win32 API 函数 RegisterClipboardFormat 执行此操作。

例如, Microsoft Excel 电子表格注册的自定义布局。 此格式相比,例如,位图上携带更多信息。 在此数据粘贴到支持电子表格格式的应用程序时,所有公式和值从电子表格保留并且可以如果需要,已更新。 Microsoft Excel 在剪贴板还将数据放入格式,以便粘贴作为一个 OLE 项。 任何 OLE 文档容器能粘贴此信息作为一个嵌入项。 使用 Microsoft Excel,此嵌入项中进行更改。 剪贴板还包含选定大小的图像的简单位图在电子表格的。 这可能也会粘贴到 OLE 文档容器或为位图编辑器,如 " 画图 "。 在位图,但是,无法操作数据作为电子表格。

若要从剪贴板检索最大信息量,应用程序应检查这些自定义格式在将数据从剪贴板中粘贴之前。

例如,启用剪切命令,可以编写处理程序应类似于:

void CMyListView::OnEditCut()
{
   // Create an OLE data source on the heap
   COleDataSource* pData = new COleDataSource;
   // Get the currently selected data
   HGLOBAL hGlob = GlobalAlloc(GMEM_FIXED, 64);
   strcpy_s((char*)hGlob, 64, "Current selection\r\n");
   // For the appropriate data formats...
   pData->CacheGlobalData( CF_TEXT, hGlob );
   // The Clipboard now owns the allocated memory
   // and will delete this data object
   // when new data is put on the Clipboard
   pData->SetClipboard();
}

您想进一步了解什么?

请参见

概念

剪贴板