网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
使用Visual C++实现OLE剪贴板
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
pboardData(pDataSource);
GetClipboardData(pDataSource, bIncludeLink,
pptOffset, pSize);
}
CATCH_ALL(e)
{
delete pDataSource;
THROW_LAST();
}
END_CATCH_ALL

ASSERT_VALID(pDataSource);
return pDataSource;
}

---- 复制、剪切和粘贴数据
---- 将数据复制或剪切到剪贴板上
---- 1. 确定将要被复制的数据是一个本地数据还是一个嵌入对象或链接。
---- 如果数据是一个嵌入对象或链接,创建一个指向被选定数据的COleClientItem指
针。
---- 如果数据是本地化的并且应用程序是一个服务器,那么从COleServerItem继承一
个新的类,并创建该对象。否则,为数据建立一个COleDataSource对象。
---- 2. 访问选定对象的CopyToClipboard成员函数。
---- 3. 如果用户选择剪切命令而不是复制,那么从你的应用程序中删除那些数据。
---- 程序示例:
void CMainView::OnEditCut()
{
ASSERT(m_pSelection != NULL);
TRY
{
m_pSelection- >CopyToClipboard(TRUE);
OnEditClear();
}
CATCH_ALL(e)
{
AfxMessageBox(IDP_CLIPBOARD_CUT_FAILED);
}
END_CATCH_ALL
}

void CMainView::OnEditCopy()
{
ASSERT(m_pSelection != NULL);
TRY
{
m_pSelection- >CopyToClipboard(TRUE);
}
CATCH_ALL(e)
{
AfxMessageBox(IDP_CLIPBOARD_COPY_FAILED);
}
END_CATCH_ALL
}

---- 从剪贴板粘贴数据
---- 粘贴数据比复制更加复杂,因为你需要选择粘贴的格式。
---- 1. 在你的视中,实现OnEditPaste来处理用户从编辑菜单选择粘贴命令的操作。
---- 2. 在OnEditPaste函数中,建立一个COleDataObject对象并且访问它的
AttachClipboard成员函数来将这个对象绑定到剪贴板。
---- 3. 访问COleDataObject::IsDataAvailable函数来检查是否可以使用特殊的格
式。当然,你也可以通过循环使用COleDataObject::BeginEnumFormats来寻找其它格式
直到你找到了最适合的格式。
---- 4. 粘贴数据。
---- 程序示例:
CRectItem* CMainView::DoPasteItem(BOOL bLink,
COleDataObject* pDataObject,CPoint* pPoint,
CLIPFORMAT cfFormat)
{
BeginWaitCursor();

CRectItem* pItem = GetDocument()- >CreateItem();
ASSERT_VALID(pItem);
BOOL bAllowAdjust = (pPoint == NULL) ? TRUE : FALSE;

COleDataObject clipboardData;
if (pDataObject == NULL)
{
clipboardData.AttachClipboard();
pDataObject = &clipboardData;
}

TRY
{
if (cfFormat == CMainDoc::m_cfPrivate)
{
DoPasteNative(pDataObject, pPoint, pItem);
}
else if (!bLink && cfFormat == 0 &&
pDataObject- >IsDataAvailable(CMainDoc::m_cfPrivate))
{
DoPasteNative(pDataObject, pPoint, pItem);
}
else if (bAllowAdjust)
{
CPoint ptDef(10, -10);
DoPasteStandard(bLink, pDataObject,
&ptDef, pItem, cfFormat);
}
else
{
DoPasteStandard(bLink, pDataObject,
pPoint, pItem, cfFormat);
}

if (bAllowAdjust)
{
GetDocument()- >AdjustItemPosition(pItem);
}
}
CATCH_ALL(e)
{
TRACE0("failed to embed/link an OLE object\n");
pItem- >Delete();
pItem = NULL;
}
END_CATCH_ALL

SetSelection(pItem, TRUE);

GetDocument()- >SetModifiedFlag();
GetDocument()- >UpdateAllViews(NULL, 0, pItem);
EndWaitCursor();

return pItem;
}

void CMainView::OnEditPaste()
{
COleDataObject clipboardData;
clipboardData.AttachClipboard();
DoPasteItem(&clipboardData);
UpdateAllViews();
}

---- 说明 将粘贴操作(如OnEditPaste函数)与实现粘贴的函数(如DoPasteItem)分
开的最大优点在于,当数据被拖放到你的应用程序中时,可以使
  • 上一篇资讯: Visual C++多线程DAO处理
  • 下一篇资讯: 抓图程序开发实践
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号