136 lines
2.6 KiB
C++
136 lines
2.6 KiB
C++
// OXMetafileViewer.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "OXMetafileViewer.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
|
|
IMPLEMENT_DYNAMIC(COXMetafileViewer, COXScrollWnd)
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COXMetafileViewer
|
|
|
|
COXMetafileViewer::COXMetafileViewer()
|
|
{
|
|
SetSmoothScrolling(TRUE);
|
|
}
|
|
|
|
COXMetafileViewer::~COXMetafileViewer()
|
|
{
|
|
m_MetaFile.CloseFile();
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(COXMetafileViewer, COXScrollWnd)
|
|
//{{AFX_MSG_MAP(COXMetafileViewer)
|
|
ON_WM_PAINT()
|
|
ON_WM_ERASEBKGND()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COXMetafileViewer message handlers
|
|
|
|
|
|
|
|
void COXMetafileViewer::OnPaint()
|
|
{
|
|
CPaintDC dc(this); // device context for painting
|
|
|
|
// TODO: Add your message handler code here
|
|
OnPrepareDC(&dc);
|
|
|
|
// get the size of image
|
|
CRect rect;
|
|
GetClientRect(rect);
|
|
CSize sizeMetafileSize=GetMetafileSize();
|
|
rect.right=rect.left+sizeMetafileSize.cx;
|
|
rect.bottom=rect.top+sizeMetafileSize.cy;
|
|
CRect rectPaint=rect;
|
|
// transform coordinates of boundary rectangle
|
|
// taking into account current zoom level
|
|
NormalToScaled(&rectPaint);
|
|
|
|
///
|
|
DrawMetafile(&dc,rectPaint);
|
|
|
|
// Do not call COXScrollWnd::OnPaint() for painting messages
|
|
}
|
|
|
|
BOOL COXMetafileViewer::OnEraseBkgnd(CDC* pDC)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
ASSERT_VALID(pDC);
|
|
|
|
CRect rect;
|
|
GetClientRect(rect);
|
|
CBrush brush(::GetSysColor(COLOR_WINDOW));
|
|
pDC->FillRect(rect,&brush);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL COXMetafileViewer::LoadFile(LPCTSTR lpszPathName)
|
|
{
|
|
if(m_MetaFile.LoadFile(lpszPathName)!=NULL)
|
|
return InitializeImage();
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
BOOL COXMetafileViewer::LoadResource(UINT nIDResource,
|
|
CString strResType/*=_T("METAFILE")*/)
|
|
{
|
|
if(m_MetaFile.LoadFile(nIDResource,strResType)!=NULL)
|
|
return InitializeImage();
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL COXMetafileViewer::InitializeImage(const CSize& sizePage/*=CSize(10,10)*/,
|
|
const CSize& sizeLine/*=CSize(1,1)*/)
|
|
{
|
|
CSize sizeMetafileSize=GetMetafileSize();
|
|
SetScrollSizes(MM_TEXT,sizeMetafileSize,sizePage,sizeLine);
|
|
SetZoomAlign(ZA_CENTER);
|
|
|
|
if(IsAlwaysFitWindow())
|
|
ZoomToWindow();
|
|
else
|
|
RedrawWindow();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL COXMetafileViewer::DrawMetafile(CDC* pDC, const CRect& rectDest)
|
|
{
|
|
// set neccessary map mode
|
|
int oldMapMode;
|
|
oldMapMode=pDC->SetMapMode(MM_TEXT);
|
|
|
|
CRect rect=rectDest;
|
|
BOOL bSuccess=m_MetaFile.PlayFile(pDC,&rect);
|
|
|
|
pDC->SetMapMode(oldMapMode);
|
|
|
|
return bSuccess;
|
|
}
|
|
|
|
CSize COXMetafileViewer::GetMetafileSize()
|
|
{
|
|
return m_MetaFile.GetSize();
|
|
}
|
|
|
|
|