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...

Tomcat启动报Malformed \uxxxx encoding

Tomcat启动报Malformed \uxxxx encoding异常。 因为做了配置参数外移,里面配置了windows的本地路径,查下来是路径问题导致。 Java在配置参数外移时,需要将win...

VC将WORD保存为BMP

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

cf 8VC Venture Cup 2017 C

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

编辑控件源metafile_source

VC下加载多种格式图片的方法总结 (轉自博客園)

VC下加载多种格式图片的方法总结尽管VC有提供相应的API和类来操作bmp位图、图标和(增强)元文件,但却不支持jpg、gif和png等格式的图片,而这几种格式却是常常要用到的。这里我给大家介绍两种办...

Windows Media™ Metafile

  • 2007-07-13 09:46
  • 110KB
  • 下载

VC下wav格式音频文件I/O操作:文件头+数据段

一.简介     WAV是一种声音文件格式,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,WAV可用WINDOWS的媒体播放器打开。     WAV...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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