VC 粘贴 CF_METAFILEPICT 格式 MetaFile

原创 2015年09月23日 15:23:57
BOOL CALLBACK MyProc (EmfPlusRecordType recordType,UINT flags,UINT dataSize,const BYTE* data,VOID *callbackData)
{
// afxDump << recordType << ";";//1,14,18,22,24,33,34,35,36,37,75,82,84
Metafile *pMtf=(Metafile *)callbackData;
switch (recordType)
{
case EMR_HEADER ://
afxDump << "EMR_HEADER \n";
afxDump << dataSize << "\n";// 100
break;
case EMR_EOF ://
afxDump << "EMR_EOF \n";
afxDump << dataSize << "\n";// 12
break;
case EMR_SETTEXTCOLOR :// or 背景色
afxDump << "EMR_SETTEXTCOLOR \n";
afxDump << dataSize << "\n";// 4
// afxDump << *(DWORD*)data << "\n";// =0 black
*(DWORD*)data=0xFFFFFFFF;// white
break;
}
pMtf->PlayRecord(recordType,flags,dataSize,data);
return TRUE;
}
//
int CALLBACK MyProc1 (HDC hdc, HANDLETABLE FAR* pTable, METARECORD FAR* pMetaRecord, int nHandles, LPARAM callbackData)
{
// afxDump << nHandles << "\n";// =2
PlayMetaFileRecord(hdc, pTable, pMetaRecord, nHandles);
return TRUE;
}
//
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
#if 1 // 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);
}

读取保存在剪切板中的图片(转)

Getting a CF_DIB or CF_METAFILEPICT from the clipboard and displaying itIntroductionI needed to disp...

windows下图形数据的粘贴操作(VC)

本文章描述了使用将CF_METAFILEPICT,CF_DIB和CF_BITMAP三种形式的剪贴板数据粘贴到程序中进行显示的方法. 本文章中代码编译环境为VS2003(VC71).使用了ATL类C...
  • nscboy
  • nscboy
  • 2010年11月11日 14:26
  • 1110

VC将WORD保存为BMP

准备工作 ClassWizeard->AddClass->From TypeLibrary 选择OFFICE安装目录下的msword.olb  导入_Application,_Document,Doc...
  • zttjhm
  • zttjhm
  • 2013年01月30日 08:47
  • 1920

怎样在剪贴板中以CF_ENHMETAFILE放一副图?

来自http://www.vckbase.com/bbs/prime/viewprime.asp?id=412下面的回复非常精彩。 /** * Create a metafile that conta...

cf 8VC Venture Cup 2017 C

题目描述: C. PolandBall and Forest time limit per test1 second memory limit per test256 megabytes in...

【语言-C++】Excel “SYLK (符号链接) *.slk”或剪切板CF_SYLK格式解析

简介 SLK (Symbolic Link, 符号链接,也可简写为"SYLK"),是一种电子表格数据库格式。 如果想了解更多参数信息,参见“SYLK 格式详解1.1.pdf”http://pan.ba...

编辑控件源metafile_source

  • 2004年06月07日 00:00
  • 7KB
  • 下载

vc6.0使用gdi+在内存中绘图并将其保存为bmp,jpg,gif,png等格式的图片

刚开始使用的是gdi保存cview中的绘图内容,但是发现由于保存的是位图所以保存下来的图片的大小很大,每个大概有2M左右,所以在网上找解决方法,选择使用GDI+来保存绘图为图片,大小为20K左右,主要...
  • zhha86
  • zhha86
  • 2011年11月28日 11:00
  • 4193

Windows Media™ Metafile

  • 2007年07月13日 09:46
  • 111KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC 粘贴 CF_METAFILEPICT 格式 MetaFile
举报原因:
原因补充:

(最多只允许输入30个字)