15,979
社区成员
发帖
与我相关
我的任务
分享
void PasteWmf(CDC *pDC)
{// In "word" Select a string such as "哈哈" , then copy text to c.b.,
// or insert a ".wmf" file also copy to c.b.
if (!IsClipboardFormatAvailable(CF_METAFILEPICT))// =3 and CF_ENHMETAFILE = 14
{
AfxMessageBox("Please copy any text from \"Word\" first!");
return;
}
HGLOBAL hMem ;
LPMETAFILEPICT lpMFP ;
OpenClipboard(NULL) ;
hMem = GetClipboardData(CF_METAFILEPICT) ;
lpMFP = (LPMETAFILEPICT)GlobalLock(hMem) ;
CloseClipboard();
// afxDump << lpMFP->mm << ";" << lpMFP->xExt << ";" << lpMFP->yExt << "\n";// 8;22013;847 or 8;15214;12965
#if 0 // use gdiplus
// 从 lpMFP->hMF 到 metafile ,不必用 Stream
Metafile metafile(lpMFP->hMF,0);// 0: not Aldus Placeable Metafiles
int Width=metafile.GetWidth();
int Height=metafile.GetHeight();
#define MARGIN 5 // or =0
// or
// MetafileHeader head;
// metafile.GetMetafileHeader(&head);
// 创建 CacheImage
Bitmap CacheImage(Width+2*MARGIN, Height+2*MARGIN);// PixelFormat32bppARGB
Graphics CacheGraphics(&CacheImage );
// 对 CacheImage 进行描画
SolidBrush brush(Color(255,252,252,100));// argb yellow
CacheGraphics.FillRectangle(&brush,0,0,Width+2*MARGIN,Height+2*MARGIN);//
// playrecord 到 CacheImage
CacheGraphics.EnumerateMetafile(&metafile, Point(MARGIN,MARGIN),MyProc,&metafile);
// 获得窗口的 Graphics 对象
Graphics Graphic(pDC->m_hDC);
// 将描画好的 CacheImage 画到窗口上
Graphic.DrawImage(&CacheImage,2, 20);
#else // use gdi
pDC->SetMapMode(lpMFP->mm) ;// MM_ANISOTROPIC
pDC->SetViewportOrg(0,0); //
POINT pt;
pt.x=(int)((double)lpMFP->xExt/25.4);
pt.y=(int)((double)lpMFP->yExt/25.4);
pDC->SetViewportExt(pt.x, pt.y);
EnumMetaFile(pDC->m_hDC,lpMFP->hMF,MyProc1,0);
#endif
GlobalUnlock(hMem);
}