⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scemf2text.cpp

📁 Source code for EMFexplorer 1.0
💻 CPP
📖 第 1 页 / 共 4 页
字号:

SC_BRKRESULT CSCEMF2Text::OnEmfPIXELFORMAT()
{
	// TRACE0("**EMR_PIXELFORMAT\n");
	EMRPIXELFORMAT *pRec = (EMRPIXELFORMAT*)m_pRecord;
	if (m_bLogRecord)
	{
		CString sExtra = SCPixelFormatText(((EMRPIXELFORMAT*)m_pRecord)->pfd);

		return SCExtraLog(sExtra);
	}
	SCPlayRecord();
	return SC_BRK_NOERROR;
}

SC_BRKRESULT CSCEMF2Text::OnEmfDRAWESCAPE()
{
	// TRACE0("**EMR_DRAWESCAPE\n");
	if (m_bLogRecord)
	{
		CString sExtra;
		sExtra.Format(_T("iEscape(%d), cbEscData:%d, EscData:0x%8x"),
			((EMRDRAWESCAPE*)m_pRecord)->iEscape,
			((EMRDRAWESCAPE*)m_pRecord)->cbEscData,
			((EMRDRAWESCAPE*)m_pRecord)->EscData[1]);
		
		return SCExtraLogNoplay(sExtra);
	}
	return SC_BRK_NOERROR;
}

SC_BRKRESULT CSCEMF2Text::OnEmfSMALLTEXTOUT()
{
	// TRACE0("**EMR_SMALLTEXTOUT\n");
	EMR *pRec = (EMR*)m_pRecord;
	if (m_bLogRecord)
	{
		SCEMRSMALLTEXTOUTA *pSmallText = (SCEMRSMALLTEXTOUTA*)m_pRecord;
		// TODO: review this line
		SCEMRSMALLTEXTOUTA2 *pTextRec2 = (SCEMRSMALLTEXTOUTA2*)m_pRecord;

		BOOL bUnicode = (pSmallText->fOptions == 0x100);
		CRect rcText;
		if (pSmallText->fOptions==0x204)
		{
			rcText.CopyRect((LPRECT)&pTextRec2->rclBoundsSC);
		} else
		{
			rcText.SetRectEmpty();
		}

		CString sExtra;
		CString strOpt = SCFormatTextOptions(pSmallText->fOptions);
			
		int nChars = pSmallText->nChars;
		TCHAR *pszText = new TCHAR[nChars+1];
		if (pszText)
		{
			if (bUnicode)
			{
				LPWSTR lpw = (LPWSTR)pTextRec2->Text;
#ifdef _UNICODE
				wcsncpy(pszText, lpw, nChars);
#else
				WideCharToMultiByte(CP_ACP, 0, lpw, nChars, pszText, (nChars+1)*sizeof(TCHAR), NULL, NULL);
#endif
			} else
			{
#ifdef _UNICODE
				MultiByteToWideChar(CP_ACP, 0, pSmallText->Text, nChars, pszText, nChars);
#else
				strncpy(pszText, pSmallText->Text, nChars);
#endif
			}
			pszText[nChars] = 0;
			sExtra.Format(_T(" TXT=[%s] ") SC_STRFMT_TXTFORM _T(" TxOPT[fOptions(%d=%s), nChars(%d), ptlRef(%d,%d)]"),
				pszText,
				pSmallText->exScale, pSmallText->eyScale, pSmallText->iGraphicsMode, SC_PARAM_RECT(rcText),
				pSmallText->fOptions, strOpt, nChars, SC_PARAM_POINT(pSmallText->ptlReference));

			delete [] pszText;
		} else
			sExtra.Format(_T(" TXT=[%s] ") SC_STRFMT_TXTFORM _T(" TxOPT[fOptions(%d=%s), nChars(%d), ptlRef(%d,%d)]"),
			_T("ERR"),
			pSmallText->exScale, pSmallText->eyScale, pSmallText->iGraphicsMode,
			pSmallText->fOptions, strOpt, nChars, SC_PARAM_POINT(pSmallText->ptlReference));

		return SCExtraLog(sExtra);
	}
	SCPlayRecord();
	return SC_BRK_NOERROR;
}

SC_BRKRESULT CSCEMF2Text::OnEmfNAMEDESCAPE()
{
	// TRACE0("**EMR_NAMEDESCAPE\n");
	if (m_bLogRecord)
	{
		CString sExtra;
		sExtra.Format(_T("iEscape(%d), cbEscData:%d, EscData:0x%8x, cbDriver:%d"),
			((EMRNAMEDESCAPE*)m_pRecord)->iEscape,
			((EMRNAMEDESCAPE*)m_pRecord)->cbEscData,
			((EMRNAMEDESCAPE*)m_pRecord)->EscData[1],
			((EMRNAMEDESCAPE*)m_pRecord)->cbDriver);

		return SCExtraLogNoplay(sExtra);
	}
	return SC_BRK_NOERROR;
}

SC_BRKRESULT CSCEMF2Text::OnEmfCOLORCORRECTPALETTE()
{
	// TRACE0("**EMR_COLORCORRECTPALETTE\n");
	if (m_bLogRecord)
	{
		CString sExtra;
		sExtra.Format(_T("ihPalette(%d) [nFirstEntry:%d, nPalEntries:%d]"),
			((EMRCOLORCORRECTPALETTE*)m_pRecord)->ihPalette,
			((EMRCOLORCORRECTPALETTE*)m_pRecord)->nFirstEntry,
			((EMRCOLORCORRECTPALETTE*)m_pRecord)->nPalEntries);

		return SCExtraLog(sExtra);
	}
	SCPlayRecord();
	return SC_BRK_NOERROR;
}

SC_BRKRESULT CSCEMF2Text::OnEmfSETICMPROFILEA()
{
	// TRACE0("**EMR_SETICMPROFILEA\n");
	if (m_bLogRecord)
	{
		CString sExtra;
		sExtra.Format(_T("dwFlags:%d, cbName:%d, cbData:%d, Data:0x%8x"),
			((EMRSETICMPROFILEA*)m_pRecord)->dwFlags,
			((EMRSETICMPROFILEA*)m_pRecord)->cbName,
			((EMRSETICMPROFILEA*)m_pRecord)->cbData,
			((EMRSETICMPROFILEA*)m_pRecord)->Data);

		return SCExtraLog(sExtra);
	}
	SCPlayRecord();
	return SC_BRK_NOERROR;
}

SC_BRKRESULT CSCEMF2Text::OnEmfALPHABLEND()
{
	// TRACE0("**EMR_ALPHABLEND\n");
	if (m_bLogRecord)
	{
		EMRALPHABLEND *pRec = (EMRALPHABLEND*)m_pRecord;
		CString sExtra;
		sExtra.Format(SC_STRFMT_RCLBOUNDS _T(", ") SC_STRFMT_DEST_CXCY _T(", ") SC_STRFMT_ROP _T(", ") SC_STRFMT_SBLTSRC,
			SC_PARAM_RCLBOUNDS(pRec->rclBounds),
			SC_PARAM_DEST_CXCY(pRec),
			SC_PARAM_ROP(pRec->dwRop),
			SC_PARAM_SBLTSRC(pRec));

		return SCExtraLog(sExtra);
	}
	SCPlayRecord();
	return SC_BRK_NOERROR;
}

SC_BRKRESULT CSCEMF2Text::OnEmfALPHADIBBLEND()
{
	// TRACE0("**EMR_SETLAYOUT\n");
	// Now it's SCEMF_SETLAYOUT
	if (m_bLogRecord)
	{
		CString sExtra;
		sExtra.Format(_T("iMode(%d=%s)"),
			((EMRSETLAYOUT*)m_pRecord)->iMode,
			SCLayoutModeText(((EMRSETLAYOUT*)m_pRecord)->iMode));

		return SCExtraLog(sExtra);
	}
	SCPlayRecord();
	return SC_BRK_NOERROR;
}

SC_BRKRESULT CSCEMF2Text::OnEmfTRANSPARENTBLT()
{
	// TRACE0("**EMR_TRANSPARENTBLT\n");
	if (m_bLogRecord)
	{
		EMRTRANSPARENTBLT *pRec = (EMRTRANSPARENTBLT*)m_pRecord;
		CString sExtra;
		sExtra.Format(SC_STRFMT_RCLBOUNDS _T(", ") SC_STRFMT_DEST_CXCY _T(", ") SC_STRFMT_ROP _T(", ") SC_STRFMT_SBLTSRC,
			SC_PARAM_RCLBOUNDS(pRec->rclBounds),
			SC_PARAM_DEST_CXCY(pRec),
			SC_PARAM_ROP(pRec->dwRop),
			SC_PARAM_SBLTSRC(pRec));

		return SCExtraLog(sExtra);
	}
	SCPlayRecord();
	return SC_BRK_NOERROR;
}

SC_BRKRESULT CSCEMF2Text::OnEmfGRADIENTFILL()
{
	// TRACE0("**EMR_GRADIENTFILL\n");
	if (m_bLogRecord)
	{
		EMRGRADIENTFILL *pRec = (EMRGRADIENTFILL*)m_pRecord;
		CString sExtra;
		sExtra.Format(SC_STRFMT_RCLBOUNDS _T("ulMode(%d=%s), nVer:%d, nTri:%d, 0x%8x"),
			SC_PARAM_RCLBOUNDS(pRec->rclBounds),
			pRec->ulMode, SCGradientFillModeText(pRec->ulMode),
			pRec->nVer,
			pRec->nTri,
			pRec->Ver);

		return SCExtraLog(sExtra);
	}
	SCPlayRecord();
	return SC_BRK_NOERROR;
}

SC_BRKRESULT CSCEMF2Text::OnBrkUNKRecord(long lMsg)
{
	// TRACE0("**UNKRecord\n");
	return SCBasicLog();
}

//////////////////////////////////////////////////////////////////////
// Utilities
//////////////////////////////////////////////////////////////////////

SC_BRKRESULT CSCEMF2Text::SCBasicLog()
{
	if (m_bLogRecord)
	{
		ASSERT(m_pIBrkCallBack);
		EMR *pRec = (EMR*)m_pRecord;

		CString strLog;
		strLog.Format(_T("R%04d: [%03d] %s\t(s=%d)\n"), m_nCurRec, pRec->iType, SCGetRecordName(pRec->iType), pRec->nSize);
		m_strLogBuf += strLog;
		if (0==(m_nCurRec % m_iCbThreshold))
		{
			if (0==m_pIBrkCallBack->OnSCBrkRecStr(m_nCurRec, (TCHAR*)LPCTSTR(m_strLogBuf)))
				return SC_BRK_STOPBREAKING;
			m_strLogBuf.Empty();
		}
	}
	SCPlayRecord();
	return SC_BRK_NOERROR;
}

SC_BRKRESULT CSCEMF2Text::SCExtraLog(LPCTSTR lpszExtra)
{
	ASSERT(m_pIBrkCallBack);

	EMR *pRec = (EMR*)m_pRecord;
	
	CString strLog;
	strLog.Format(_T("R%04d: [%03d] %s\t(s=%d)\t{%s}\n"), m_nCurRec, pRec->iType, SCGetRecordName(pRec->iType), pRec->nSize, lpszExtra);
	m_strLogBuf += strLog;
	if (0==(m_nCurRec % m_iCbThreshold))
	{
		if (0==m_pIBrkCallBack->OnSCBrkRecStr(m_nCurRec, (TCHAR*)LPCTSTR(m_strLogBuf)))
			return SC_BRK_STOPBREAKING;
		m_strLogBuf.Empty();
	}
	
	SCPlayRecord();
	return SC_BRK_NOERROR;
}

SC_BRKRESULT CSCEMF2Text::SCExtraLogNoplay(LPCTSTR lpszExtra)
{
	ASSERT(m_pIBrkCallBack);

	EMR *pRec = (EMR*)m_pRecord;
	
	CString strLog;
	strLog.Format(_T("R%04d: [%03d] %s\t(s=%d)\t{%s}\n"), m_nCurRec, pRec->iType, SCGetRecordName(pRec->iType), pRec->nSize, lpszExtra);
	m_strLogBuf += strLog;
	if (0==(m_nCurRec % m_iCbThreshold))
	{
		if (0==m_pIBrkCallBack->OnSCBrkRecStr(m_nCurRec, (TCHAR*)LPCTSTR(m_strLogBuf)))
			return SC_BRK_STOPBREAKING;
		m_strLogBuf.Empty();
	}
	
	return SC_BRK_NOERROR;
}

//////////////////////////////////////////////////////////////////////
// Events dispatcher
//////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////
// Starter methods
//////////////////////////////////////////////////////////////////////

SC_BRKRESULT CSCEMF2Text::SCMetafile2Text(HDC hdc,
										   HENHMETAFILE hemf,
										   LPVOID lpData,
										   CONST RECT *lpRect,
										   BOOL bLogRecord/*=FALSE*/)
{
	m_bLogRecord = ((m_pIBrkCallBack!=NULL) && bLogRecord);
	return SCBreakMetafile(hdc, hemf, lpData, lpRect);
}



//////////////////////////////////////////////////////////////////////
// Helpers
//////////////////////////////////////////////////////////////////////
void CSCEMF2Text::SCEndBreak()
{
	if (m_bLogRecord)
	{
		ASSERT(m_pIBrkCallBack);
		if (!m_strLogBuf.IsEmpty())
		{
			ASSERT(m_nCurRec>0);
			m_pIBrkCallBack->OnSCBrkRecStr(m_nCurRec, (TCHAR*)LPCTSTR(m_strLogBuf));
			m_strLogBuf.Empty();
		}
	}
}


//////////////////////////////////////////////////////////////////////
// Message map
//////////////////////////////////////////////////////////////////////
SC_BEGIN_MESSAGE_MAP(CSCEMF2Text, SCBrkTarget)
	ON_VECTRECORD(SCEMF_HEADER, OnEmfHEADER)
	ON_VECTRECORD(SCEMF_POLYBEZIER, OnEmfPOLYGON)
	ON_VECTRECORD(SCEMF_POLYGON, OnEmfPOLYGON)
	ON_VECTRECORD(SCEMF_POLYLINE, OnEmfPOLYGON)
	ON_VECTRECORD(SCEMF_POLYBEZIERTO, OnEmfPOLYGON)
	ON_VECTRECORD(SCEMF_POLYLINETO, OnEmfPOLYGON)
	ON_VECTRECORD(SCEMF_POLYPOLYLINE, OnEmfPOLYPOLYGON)
	ON_VECTRECORD(SCEMF_POLYPOLYGON, OnEmfPOLYPOLYGON)
	ON_VECTRECORD(SCEMF_SETWINDOWEXTEX, OnEmfSETWINDOWEXTEX)
	ON_VECTRECORD(SCEMF_SETWINDOWORGEX, OnEmfSETWINDOWORGEX)
	ON_VECTRECORD(SCEMF_SETVIEWPORTEXTEX, OnEmfSETVIEWPORTEXTEX)
	ON_VECTRECORD(SCEMF_SETVIEWPORTORGEX, OnEmfSETVIEWPORTORGEX)
	ON_VECTRECORD(SCEMF_SETBRUSHORGEX, OnEmfSETBRUSHORGEX)
	ON_VECTRECORD(SCEMF_EOF, OnEmfEOF)
	ON_VECTRECORD(SCEMF_SETPIXELV, OnEmfSETPIXELV)
	ON_VECTRECORD(SCEMF_SETMAPPERFLAGS, OnEmfSETMAPPERFLAGS)
	ON_VECTRECORD(SCEMF_SETMAPMODE, OnEmfSETMAPMODE)
	ON_VECTRECORD(SCEMF_SETBKMODE, OnEmfSETBKMODE)
	ON_VECTRECORD(SCEMF_SETPOLYFILLMODE, OnEmfSETPOLYFILLMODE)
	ON_VECTRECORD(SCEMF_SETROP2, OnEmfSETROP2)
	ON_VECTRECORD(SCEMF_SETSTRETCHBLTMODE, OnEmfSETSTRETCHBLTMODE)
	ON_VECTRECORD(SCEMF_SETTEXTALIGN, OnEmfSETTEXTALIGN)
	ON_VECTRECORD(SCEMF_SETCOLORADJUSTMENT, SCBasicLog)
	ON_VECTRECORD(SCEMF_SETTEXTCOLOR, OnEmfSETTEXTCOLOR)
	ON_VECTRECORD(SCEMF_SETBKCOLOR, OnEmfSETBKCOLOR)
	ON_VECTRECORD(SCEMF_OFFSETCLIPRGN, OnEmfOFFSETCLIPRGN)
	ON_VECTRECORD(SCEMF_MOVETOEX, OnEmfMOVETOEX)
	ON_VECTRECORD(SCEMF_SETMETARGN, SCBasicLog)
	ON_VECTRECORD(SCEMF_EXCLUDECLIPRECT, OnEmfEXCLUDECLIPRECT)
	ON_VECTRECORD(SCEMF_INTERSECTCLIPRECT, OnEmfINTERSECTCLIPRECT)
	ON_VECTRECORD(SCEMF_SCALEVIEWPORTEXTEX, OnEmfSCALEVIEWPORTEXTEX)
	ON_VECTRECORD(SCEMF_SCALEWINDOWEXTEX, OnEmfSCALEWINDOWEXTEX)
	ON_VECTRECORD(SCEMF_SAVEDC, SCBasicLog)
	ON_VECTRECORD(SCEMF_RESTOREDC, OnEmfRESTOREDC)
	ON_VECTRECORD(SCEMF_SETWORLDTRANSFORM, OnEmfSETWORLDTRANSFORM)
	ON_VECTRECORD(SCEMF_MODIFYWORLDTRANSFORM, OnEmfMODIFYWORLDTRANSFORM)
	ON_VECTRECORD(SCEMF_SELECTOBJECT, OnEmfSELECTOBJECT)
	ON_VECTRECORD(SCEMF_CREATEPEN, OnEmfCREATEPEN)
	ON_VECTRECORD(SCEMF_CREATEBRUSHINDIRECT, OnEmfCREATEBRUSHINDIRECT)
	ON_VECTRECORD(SCEMF_DELETEOBJECT, OnEmfDELETEOBJECT)
	ON_VECTRECORD(SCEMF_ANGLEARC, OnEmfANGLEARC)
	ON_VECTRECORD(SCEMF_ELLIPSE, OnEmfELLIPSE)
	ON_VECTRECORD(SCEMF_RECTANGLE, OnEmfRECTANGLE)
	ON_VECTRECORD(SCEMF_ROUNDRECT, OnEmfROUNDRECT)
	ON_VECTRECORD(SCEMF_ARC, OnEmfARC)
	ON_VECTRECORD(SCEMF_CHORD, OnEmfARC)
	ON_VECTRECORD(SCEMF_PIE, OnEmfARC)
	ON_VECTRECORD(SCEMF_SELECTPALETTE, OnEmfSELECTPALETTE)
	ON_VECTRECORD(SCEMF_CREATEPALETTE, OnEmfCREATEPALETTE)
	ON_VECTRECORD(SCEMF_SETPALETTEENTRIES, OnEmfSETPALETTEENTRIES)
	ON_VECTRECORD(SCEMF_RESIZEPALETTE, OnEmfRESIZEPALETTE)
	ON_VECTRECORD(SCEMF_REALIZEPALETTE, SCBasicLog)
	ON_VECTRECORD(SCEMF_EXTFLOODFILL, OnEmfEXTFLOODFILL)
	ON_VECTRECORD(SCEMF_LINETO, OnEmfLINETO)
	ON_VECTRECORD(SCEMF_ARCTO, OnEmfARC)
	ON_VECTRECORD(SCEMF_POLYDRAW, OnEmfPOLYDRAW)
	ON_VECTRECORD(SCEMF_SETARCDIRECTION, OnEmfSETARCDIRECTION)
	ON_VECTRECORD(SCEMF_SETMITERLIMIT, OnEmfSETMITERLIMIT)
	ON_VECTRECORD(SCEMF_BEGINPATH, SCBasicLog)
	ON_VECTRECORD(SCEMF_ENDPATH, SCBasicLog)
	ON_VECTRECORD(SCEMF_CLOSEFIGURE, SCBasicLog)
	ON_VECTRECORD(SCEMF_FILLPATH, OnEmfFILLPATH)
	ON_VECTRECORD(SCEMF_STROKEANDFILLPATH, OnEmfFILLPATH)
	ON_VECTRECORD(SCEMF_STROKEPATH, OnEmfFILLPATH)
	ON_VECTRECORD(SCEMF_FLATTENPATH, SCBasicLog)
	ON_VECTRECORD(SCEMF_WIDENPATH, SCBasicLog)
	ON_VECTRECORD(SCEMF_SELECTCLIPPATH, OnEmfSELECTCLIPPATH)
	ON_VECTRECORD(SCEMF_ABORTPATH, SCBasicLog)
	ON_VECTRECORD(SCEMF_GDICOMMENT, OnEmfGDICOMMENT)
	ON_VECTRECORD(SCEMF_FILLRGN, OnEmfFILLRGN)
	ON_VECTRECORD(SCEMF_FRAMERGN, OnEmfFRAMERGN)
	ON_VECTRECORD(SCEMF_INVERTRGN, OnEmfPAINTRGN)
	ON_VECTRECORD(SCEMF_PAINTRGN, OnEmfPAINTRGN)
	ON_VECTRECORD(SCEMF_EXTSELECTCLIPRGN, OnEmfEXTSELECTCLIPRGN)
	ON_VECTRECORD(SCEMF_BITBLT, OnEmfBITBLT)
	ON_VECTRECORD(SCEMF_STRETCHBLT, OnEmfSTRETCHBLT)
	ON_VECTRECORD(SCEMF_MASKBLT, OnEmfMASKBLT)
	ON_VECTRECORD(SCEMF_PLGBLT, OnEmfPLGBLT)
	ON_VECTRECORD(SCEMF_SETDIBITSTODEVICE, OnEmfSETDIBITSTODEVICE)
	ON_VECTRECORD(SCEMF_STRETCHDIBITS, OnEmfSTRETCHDIBITS)
	ON_VECTRECORD(SCEMF_EXTCREATEFONTINDIRECTW, OnEmfEXTCREATEFONTINDIRECTW)
	ON_VECTRECORD(SCEMF_EXTTEXTOUTA, OnEmfEXTTEXTOUTA)
	ON_VECTRECORD(SCEMF_EXTTEXTOUTW, OnEmfEXTTEXTOUTW)
	ON_VECTRECORD(SCEMF_POLYBEZIER16, OnEmfPOLYGON16)
	ON_VECTRECORD(SCEMF_POLYGON16, OnEmfPOLYGON16)
	ON_VECTRECORD(SCEMF_POLYLINE16, OnEmfPOLYGON16)
	ON_VECTRECORD(SCEMF_POLYBEZIERTO16, OnEmfPOLYGON16)
	ON_VECTRECORD(SCEMF_POLYLINETO16, OnEmfPOLYGON16)
	ON_VECTRECORD(SCEMF_POLYPOLYLINE16, OnEmfPOLYPOLYGON16)
	ON_VECTRECORD(SCEMF_POLYPOLYGON16, OnEmfPOLYPOLYGON16)
	ON_VECTRECORD(SCEMF_POLYDRAW16, OnEmfPOLYDRAW16)
	ON_VECTRECORD(SCEMF_CREATEMONOBRUSH, OnEmfCREATEMONOBRUSH)
	ON_VECTRECORD(SCEMF_CREATEDIBPATTERNBRUSHPT, OnEmfCREATEDIBPATTERNBRUSHPT)
	ON_VECTRECORD(SCEMF_EXTCREATEPEN, OnEmfEXTCREATEPEN)
	ON_VECTRECORD(SCEMF_POLYTEXTOUTA, OnEmfPOLYTEXTOUTA)
	ON_VECTRECORD(SCEMF_POLYTEXTOUTW, OnEmfPOLYTEXTOUTA)
	ON_VECTRECORD(SCEMF_SETICMMODE, OnEmfSETICMMODE)
	ON_VECTRECORD(SCEMF_CREATECOLORSPACE, OnEmfCREATECOLORSPACE)
	ON_VECTRECORD(SCEMF_SETCOLORSPACE, OnEmfSETCOLORSPACE)
	ON_VECTRECORD(SCEMF_DELETECOLORSPACE, OnEmfSETCOLORSPACE)
	ON_VECTRECORD(SCEMF_GLSRECORD, OnEmfGLSRECORD)
	ON_VECTRECORD(SCEMF_GLSBOUNDEDRECORD, OnEmfGLSBOUNDEDRECORD)
	ON_VECTRECORD(SCEMF_PIXELFORMAT, OnEmfPIXELFORMAT)
	ON_VECTRECORD(SCEMF_DRAWESCAPE, OnEmfDRAWESCAPE)
	ON_VECTRECORD(SCEMF_EXTESCAPE, OnEmfDRAWESCAPE)
	ON_VECTRECORD(SCEMF_STARTDOC, SCBasicLog)
	ON_VECTRECORD(SCEMF_SMALLTEXTOUT, OnEmfSMALLTEXTOUT)
	ON_VECTRECORD(SCEMF_FORCEUFIMAPPING, SCBasicLog)
	ON_VECTRECORD(SCEMF_NAMEDESCAPE, OnEmfNAMEDESCAPE)
	ON_VECTRECORD(SCEMF_COLORCORRECTPALETTE, OnEmfCOLORCORRECTPALETTE)
	ON_VECTRECORD(SCEMF_SETICMPROFILEA, OnEmfSETICMPROFILEA)
	ON_VECTRECORD(SCEMF_SETICMPROFILEW, OnEmfSETICMPROFILEA)
	ON_VECTRECORD(SCEMF_ALPHABLEND, OnEmfALPHABLEND)
	ON_VECTRECORD(SCEMF_ALPHADIBBLEND, OnEmfALPHADIBBLEND)
	ON_VECTRECORD(SCEMF_TRANSPARENTBLT, OnEmfTRANSPARENTBLT)
	ON_VECTRECORD(SCEMF_TRANSPARENTDIB, SCBasicLog)
	ON_VECTRECORD(SCEMF_GRADIENTFILL, OnEmfGRADIENTFILL)
	ON_VECTRECORD(SCEMF_SETLINKEDUFIS, SCBasicLog)
	ON_VECTRECORD(SCEMF_SETTEXTJUSTIFICATION, SCBasicLog)
	ON_VECTRECORD(SCEMF_CREATECOLORSPACEW, OnEmfCREATECOLORSPACEW)
SC_END_MESSAGE_MAP()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -