15,978
社区成员
发帖
与我相关
我的任务
分享
BOOL CALLBACK MyProc (EmfPlusRecordType recordType,UINT flags,UINT dataSize,const BYTE* data,VOID *callbackData)
{// 1= recordType EmfRecordTypeHeader
//#define EMR_HEADER 1
//#define EMR_EOF 14
//#define EMR_SETBKMODE 18
//#define EMR_SETTEXTALIGN 22
//#define EMR_SETTEXTCOLOR 24
//#define EMR_SAVEDC 33
//#define EMR_RESTOREDC 34
//#define EMR_SETWORLDTRANSFORM 35
//#define EMR_MODIFYWORLDTRANSFORM 36
//#define EMR_SELECTOBJECT 37
//#define EMR_EXTSELECTCLIPRGN 75
//#define EMR_EXTCREATEFONTINDIRECTW 82
//#define EMR_EXTTEXTOUTW 84
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 << sizeof(METAHEADER) << "\n";// 140
afxDump << dataSize << "\n";// 100
break;
case EMR_EOF ://
afxDump << "EMR_EOF \n";
// afxDump << dataSize << "\n";
break;
case EMR_SETTEXTCOLOR ://
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;
}
注意 *(DWORD*)data=0xFFFFFFFF;// white
BOOL CALLBACK MyProc (EmfPlusRecordType recordType,UINT flags,UINT dataSize,const BYTE* data,VOID *callbackData)
{
Metafile *pMtf=(Metafile *)callbackData;
pMtf->PlayRecord(recordType,flags,dataSize,data);
return TRUE;
}
//
void PasteWmf(CDC *pDC)
{// In "word" Selete an Title text such as "哈哈" , then copy text to c.b.
if (IsClipboardFormatAvailable(CF_METAFILEPICT))// =3 and CF_ENHMETAFILE = 14
{
HGLOBAL hMem ;
LPMETAFILEPICT lpMFP ;
OpenClipboard(NULL) ;
hMem = GetClipboardData(CF_METAFILEPICT) ;
lpMFP = (LPMETAFILEPICT)GlobalLock(hMem) ;
CloseClipboard() ;
//
Bitmap CacheImage(100, 100, 40, PixelFormat32bppARGB,0);
Graphics CacheGraphics(&CacheImage );
// 对 CacheImage 进行描画
SolidBrush brush(Color(255,255,255,255));// argb
CacheGraphics.FillRectangle(&brush,0,0,100,100);//
Metafile metafile(lpMFP->hMF,0);// 0: not Aldus Placeable Metafiles
CacheGraphics.EnumerateMetafile(&metafile, PointF(0,0),MyProc,&metafile);
// 获得窗口的 Graphics 对象
Graphics Graphic(pDC->m_hDC);
// 将描画好的 CacheImage 画到窗口上
Graphic.DrawImage(&CacheImage, 20, 20);
GlobalUnlock(hMem);
}
}