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

📄 scemf2text.cpp

📁 Source code for EMFexplorer 1.0
💻 CPP
📖 第 1 页 / 共 4 页
字号:
/*
*	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 + -