📄 scemf2text.cpp
字号:
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 + -