剪贴板:使用Windows剪贴板
本主题介绍如何使用在您的 MFC 应用程序内标准的 windows 剪贴板 API。
到窗口的大多数应用程序支持剪切或复制的数据到 windows 剪贴板以及从剪贴板中粘贴数据。 剪贴板数据格式在应用程序之间会有所不同。 框架支持剪贴板格式的只有有限类的有限的。 通常实现剪贴板相关的命令 )剪切、复制和粘贴 —在您的意图的 " 编辑 " 菜单。 类库定义了这些命令的命令 ID: ID_EDIT_CUT、 ID_EDIT_COPY和 ID_EDIT_PASTE。 其消息行提示还定义。
消息和命令在结构 解释如何处理您的应用程序的菜单命令通过映射菜单命令给处理程序函数。 只要应用程序未定义功能为剪贴板在 " 编辑 " 菜单命令的处理程序,它们保持禁用状态。 编写处理程序剪辑函数,并复制命令,在应用程序中实现选择。 编写粘贴命令的一个处理程序函数,查询剪贴板查看它是否在应用程序中可接受的布局包含数据。 例如,启用复制命令,则可能编写处理程序应类似于:
void CMyListView::OnEditCopy()
{
if ( !OpenClipboard() )
{
AfxMessageBox( _T("Cannot open the Clipboard") );
return;
}
// Remove the current Clipboard contents
if( !EmptyClipboard() )
{
AfxMessageBox( _T("Cannot empty the Clipboard") );
return;
}
// 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...
if ( ::SetClipboardData( CF_TEXT, hGlob ) == NULL )
{
CString msg;
msg.Format(_T("Unable to set Clipboard data, error: %d"), GetLastError());
AfxMessageBox( msg );
CloseClipboard();
GlobalFree(hGlob);
return;
}
CloseClipboard();
}
剪切、复制和粘贴命令才有意义的某些上下文。 应启用 " 剪切 " 和 " 复制 " 命令,仅当时和粘贴命令,仅当在剪贴板时。 您可以通过定义更新基于上下文启用或禁用这些命令的处理程序函数提供此行为。 有关更多信息,请参见 如何更新用户界面对象。
Microsoft 基础类库 (mfc) 提供剪贴板以便编辑器与 CEdit 和 CEditView 类的文本支持。 OLE 类还简化实现涉及 OLE 项的剪贴板操作。 有关 OLE 类的更多信息,请参见 剪贴板:使用 OLE 剪贴板结构。
实现其他编辑菜单命令,例如取消 (ID_EDIT_UNDO) 和重做 (ID_EDIT_REDO),也好您。 如果应用程序不支持这些命令,使用 Visual C++ 资源编辑器,可以从的资源文件轻松地删除它们。