使用Visual C++实现OLE剪贴板
2008-11-13 19:30:10 来源:WEB开发网---- 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 objectn");
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)分开的最大优点在于,当数据被拖放到你的应用程序中时,可以使用同样的粘贴代码。
更多精彩
赞助商链接