剪贴板:使用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();
}