Place a enhanced metafile on the clipboard (uses OLE)

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

(1) If you don’t have OLE in your project already then add this

#include < afxole.h >

and do the following during initialization

OleInitialize(NULL);

(2) The following places a metafile copy of a view on the clipboard. It can be easily modified to work with any CWnd that draws to a CDC.

void CMyView::OnEditCopyWmf()
{
	tagSTGMEDIUM * data;
	CClientDC dcRef( this );
	data = new tagSTGMEDIUM;
	CMetaFileDC * dcMeta;
	dcMeta = new CMetaFileDC();
	COleDataSource* pData = new COleDataSource;
	CRect lmbr;
	GetClientRect(lmbr);
	//replace "ImageName" with a description of this image
	dcMeta->CreateEnhanced(&dcRef, NULL, NULL,"ImageNameCopy" );
	dcMeta->SetMapMode(MM_TEXT);
	//actually draw to the device context
	OnDraw(dcMeta);
	//done drawing
	data->tymed = TYMED_ENHMF;
	data->hEnhMetaFile = dcMeta->CloseEnhanced();
	pData->CacheData( CF_ENHMETAFILE, data );
	pData->SetClipboard();
	delete dcMeta;
	delete data;
}

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read