📄 scemf2text.cpp
字号:
/*
* This file is part of the EMFexplorer projet.
* Copyright (C) 2004 Smith Charles.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*
* Extension: for commercial use, apply the Equity Public License, which
* adds to the normal terms of the GLPL a condition of donation to the author.
* If you are interested in support for this source code,
* contact Smith Charles <smith.charles@free.fr> for more information.
*/
#include "stdafx.h"
#include "SCEMF2Text.h"
#include "SCEMFDefs.h"
#include "SCEMFTxtUtils.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// #define SC_LOG_RAWDATA_ONLY
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSCEMF2Text::CSCEMF2Text():
SCBrkEMF(),
m_bLogRecord(FALSE),
m_iCbThreshold(100)
{
}
CSCEMF2Text::~CSCEMF2Text()
{
}
//////////////////////////////////////////////////////////////////////
// Events methods
//////////////////////////////////////////////////////////////////////
SC_BRKRESULT CSCEMF2Text::OnEmfHEADER()
{
// TRACE0("**EMR_HEADER\n");
ENHMETAHEADER *pRec = (ENHMETAHEADER*)m_pRecord;
if (m_pIBrkCallBack)
{
if (0==m_pIBrkCallBack->OnSCBrkMaxPos(pRec->nRecords))
return SC_BRK_STOPBREAKING;
if (m_bLogRecord)
{
CString sExtra;
#if(WINVER >= 0x0400)
sExtra.Format(_T("{ Bounds(%d,%d,%d,%d), Frame(%d,%d,%d,%d), ver(0x%x), size(%d), recs(%d), handles(%d), pals(%d), dev_pix(%d,%d), dev_mil(%d,%d), pixf_size(%d), pixf_ofs(%d), openGL(%d) }"),
SC_PARAM_RCLBOUNDS(pRec->rclBounds), SC_PARAM_RECT(pRec->rclFrame), pRec->nVersion, pRec->nBytes, pRec->nRecords, pRec->nHandles, pRec->nPalEntries, SC_PARAM_SIZE(pRec->szlDevice),SC_PARAM_SIZE(pRec->szlMillimeters),
pRec->cbPixelFormat, pRec->offPixelFormat, pRec->bOpenGL);
#else
sExtra.Format(_T("{ Bounds(%d,%d,%d,%d), Frame(%d,%d,%d,%d), ver(%d), size(%d), recs(%d), handles(%d), pals(%d), dev_pix(%d,%d), dev_mil(%d,%d) }"),
SC_PARAM_RCLBOUNDS(pRec->rclBounds), SC_PARAM_RECT(pRec->rclFrame), pRec->nVersion, pRec->nBytes, pRec->nRecords, pRec->nHandles, pRec->nPalEntries, SC_PARAM_SIZE(pRec->szlDevice),SC_PARAM_SIZE(pRec->szlMillimeters));
#endif /* WINVER >= 0x0400 */
return SCExtraLog(sExtra);
}
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfPOLYGON()
{
// TRACE0("**EMR_POLYGON\n");
if (m_bLogRecord)
{
CString sExtra = SCFormatEmrPolygon((EMRPOLYGON*)m_pRecord);
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfPOLYPOLYGON()
{
// TRACE0("**EMR_POLYPOLYGON\n");
if (m_bLogRecord)
{
CString sExtra = SCFormatEmrPolyPolygon((EMRPOLYPOLYGON*)m_pRecord);
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETWINDOWEXTEX()
{
// TRACE0("**EMR_SETWINDOWEXTEX\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(_T("szlExtent(%d,%d)"),
SC_PARAM_SIZE(((EMRSETWINDOWEXTEX*)m_pRecord)->szlExtent));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETWINDOWORGEX()
{
// TRACE0("**EMR_SETWINDOWORGEX\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(_T("ptlOrigin(%d,%d)"),
SC_PARAM_POINT(((EMRSETWINDOWORGEX*)m_pRecord)->ptlOrigin));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETVIEWPORTEXTEX()
{
// TRACE0("**EMR_SETVIEWPORTEXTEX\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(_T("szlExtent(%d,%d)"),
SC_PARAM_SIZE(((EMRSETVIEWPORTEXTEX*)m_pRecord)->szlExtent));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETVIEWPORTORGEX()
{
// TRACE0("**EMR_SETVIEWPORTORGEX\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(_T("ptlOrigin(%d,%d)"),
SC_PARAM_POINT(((EMRSETVIEWPORTORGEX*)m_pRecord)->ptlOrigin));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETBRUSHORGEX()
{
// TRACE0("**EMR_SETBRUSHORGEX\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(_T("ptlOrigin(%d,%d)"),
SC_PARAM_POINT(((EMRSETBRUSHORGEX*)m_pRecord)->ptlOrigin));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfEOF()
{
// TRACE0("**EMR_EOF\n");
if (m_bLogRecord)
{
EMREOF* pRec = (EMREOF*)m_pRecord;
int iSizeLast = pRec->nSizeLast;
if (pRec->nPalEntries && pRec->offPalEntries)
{
BYTE* p = (BYTE*)pRec + pRec->offPalEntries;
p += pRec->nPalEntries*sizeof(PALETTEENTRY);
iSizeLast = *((DWORD*)p);
}
CString sExtra;
sExtra.Format(_T("nPalEntries:%d, offPalEntries:%d, nSizeLast:%d"),
pRec->nPalEntries,
pRec->offPalEntries,
iSizeLast);
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETPIXELV()
{
// TRACE0("**EMR_SETPIXELV\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(_T("ptlPixel(%d,%d), crColor(") SC_STRFMT_COLOR _T(")"),
SC_PARAM_POINT(((EMRSETPIXELV*)m_pRecord)->ptlPixel),
((EMRSETPIXELV*)m_pRecord)->crColor);
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETMAPPERFLAGS()
{
// TRACE0("**EMR_SETMAPPERFLAGS\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(_T("dwFlags(%d)"),
((EMRSETMAPPERFLAGS*)m_pRecord)->dwFlags);
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETMAPMODE()
{
// TRACE0("**EMR_SETMAPMODE\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(SC_STRFMT_MODE2,
((EMRSETMAPMODE*)m_pRecord)->iMode,
SCMapModeText(((EMRSETMAPMODE*)m_pRecord)->iMode));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETBKMODE()
{
// TRACE0("**EMR_SETBKMODE\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(SC_STRFMT_MODE2,
((EMRSETBKMODE*)m_pRecord)->iMode,
SCBkModeText(((EMRSETBKMODE*)m_pRecord)->iMode));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETPOLYFILLMODE()
{
// TRACE0("**EMR_SETPOLYFILLMODE\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(SC_STRFMT_MODE2,
((EMRSETPOLYFILLMODE*)m_pRecord)->iMode,
SCPolyFillModeText(((EMRSETPOLYFILLMODE*)m_pRecord)->iMode));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETROP2()
{
// TRACE0("**EMR_SETROP2\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(SC_STRFMT_MODE2,
((EMRSETROP2*)m_pRecord)->iMode,
SCRop2Text(((EMRSETROP2*)m_pRecord)->iMode));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETSTRETCHBLTMODE()
{
// TRACE0("**EMR_SETSTRETCHBLTMODE\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(SC_STRFMT_MODE2,
((EMRSETSTRETCHBLTMODE*)m_pRecord)->iMode,
SCStretchBltModeText(((EMRSETSTRETCHBLTMODE*)m_pRecord)->iMode));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETTEXTALIGN()
{
// TRACE0("**EMR_SETTEXTALIGN\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(SC_STRFMT_MODE2,
((EMRSETTEXTALIGN*)m_pRecord)->iMode,
SCTextAlignModeText(((EMRSETTEXTALIGN*)m_pRecord)->iMode));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETTEXTCOLOR()
{
// TRACE0("**EMR_SETTEXTCOLOR\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(SC_STRFMT_COLOR,
((EMRSETTEXTCOLOR*)m_pRecord)->crColor);
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSETBKCOLOR()
{
// TRACE0("**EMR_SETBKCOLOR\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(SC_STRFMT_COLOR,
((EMRSETBKCOLOR*)m_pRecord)->crColor);
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfOFFSETCLIPRGN()
{
// TRACE0("**EMR_OFFSETCLIPRGN\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(_T(" ptlOffset(%d,%d)"),
SC_PARAM_POINT(((EMROFFSETCLIPRGN*)m_pRecord)->ptlOffset));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfMOVETOEX()
{
// TRACE0("**EMR_MOVETOEX\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(_T(" ptl(%d,%d)"),
SC_PARAM_POINT(((EMRMOVETOEX*)m_pRecord)->ptl));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfEXCLUDECLIPRECT()
{
// TRACE0("**EMR_EXCLUDECLIPRECT\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(_T("rclClip(%d,%d,%d,%d)"),
SC_PARAM_RECT(((EMREXCLUDECLIPRECT*)m_pRecord)->rclClip));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfINTERSECTCLIPRECT()
{
// TRACE0("**EMR_INTERSECTCLIPRECT\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(_T("rclClip(%d,%d,%d,%d)"),
SC_PARAM_RECT(((EMRINTERSECTCLIPRECT*)m_pRecord)->rclClip));
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSCALEVIEWPORTEXTEX()
{
// TRACE0("**EMR_SCALEVIEWPORTEXTEX\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(_T("xNumDenom(%d,%d), yNumDenom(%d,%d)"),
((EMRSCALEVIEWPORTEXTEX*)m_pRecord)->xNum,
((EMRSCALEVIEWPORTEXTEX*)m_pRecord)->xDenom,
((EMRSCALEVIEWPORTEXTEX*)m_pRecord)->yNum,
((EMRSCALEVIEWPORTEXTEX*)m_pRecord)->yDenom
);
return SCExtraLog(sExtra);
}
SCPlayRecord();
return SC_BRK_NOERROR;
}
SC_BRKRESULT CSCEMF2Text::OnEmfSCALEWINDOWEXTEX()
{
// TRACE0("**EMR_SCALEWINDOWEXTEX\n");
if (m_bLogRecord)
{
CString sExtra;
sExtra.Format(_T("xNumDenom(%d,%d), yNumDenom(%d,%d)"),
((EMRSCALEWINDOWEXTEX*)m_pRecord)->xNum,
((EMRSCALEWINDOWEXTEX*)m_pRecord)->xDenom,
((EMRSCALEWINDOWEXTEX*)m_pRecord)->yNum,
((EMRSCALEWINDOWEXTEX*)m_pRecord)->yDenom
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -