149 lines
3.8 KiB
C++
149 lines
3.8 KiB
C++
// ScaleRollupDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "dibmanager.h"
|
|
#include "mainfrm.h"
|
|
#include "ScaleRollupDlg.h"
|
|
|
|
#include <math.h>
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CScaleRollupDlg dialog
|
|
|
|
|
|
CScaleRollupDlg::CScaleRollupDlg(CWnd* pParent /*=NULL*/)
|
|
: COXRollup(CScaleRollupDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CScaleRollupDlg)
|
|
m_nScaledHeight = 0;
|
|
m_nScaledWidth = 0;
|
|
m_nZoomLevel = 0;
|
|
//}}AFX_DATA_INIT
|
|
m_nOrigHeight=0;
|
|
m_nOrigWidth=0;
|
|
}
|
|
|
|
|
|
void CScaleRollupDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
COXRollup::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CScaleRollupDlg)
|
|
DDX_Control(pDX, IDC_ZOOM_LEVEL, m_ctlZoomLevel);
|
|
DDX_Control(pDX, IDC_SPIN_ZOOM_LEVEL, m_ctlSpinZoom);
|
|
DDX_Control(pDX, IDC_PICTURE, m_ctlPicture);
|
|
DDX_Text(pDX, IDC_SCALED_HEIGHT, m_nScaledHeight);
|
|
DDX_Text(pDX, IDC_SCALED_WIDTH, m_nScaledWidth);
|
|
DDX_Text(pDX, IDC_ZOOM_LEVEL, m_nZoomLevel);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CScaleRollupDlg, COXRollup)
|
|
//{{AFX_MSG_MAP(CScaleRollupDlg)
|
|
ON_BN_CLICKED(IDC_BUTTON_APPLY, OnButtonApply)
|
|
ON_EN_CHANGE(IDC_ZOOM_LEVEL, OnChangeZoomLevel)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CScaleRollupDlg message handlers
|
|
|
|
void CScaleRollupDlg::OnButtonApply()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
|
|
if(m_nZoomLevel<ID_MIN_ZOOM_LEVEL)
|
|
{
|
|
m_nZoomLevel=ID_MIN_ZOOM_LEVEL;
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
|
|
// notify current recipient window
|
|
// that we have to change zoom level
|
|
RUpdateData(TRUE);
|
|
Send2MR(ID_APPLY);
|
|
|
|
ShowControls();
|
|
}
|
|
|
|
void CScaleRollupDlg::OnChangeZoomLevel()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the CDialog::OnInitDialog()
|
|
// function to send the EM_SETEVENTMASK message to the control
|
|
// with the ENM_CHANGE flag ORed into the lParam mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
|
|
UpdateData(TRUE);
|
|
|
|
ShowControls();
|
|
}
|
|
|
|
BOOL CScaleRollupDlg::OnInitDialog()
|
|
{
|
|
COXRollup::OnInitDialog();
|
|
|
|
// TODO: Add extra initialization here
|
|
|
|
// Set the COXSpinCtrl object, which is mapped to a common Spin Control.
|
|
m_ctlSpinZoom.SetBuddy(&m_ctlZoomLevel);
|
|
m_ctlSpinZoom.SetRange(ID_MIN_ZOOM_LEVEL,ID_MAX_ZOOM_LEVEL);
|
|
m_ctlSpinZoom.SetPos(m_nZoomLevel);
|
|
|
|
// Set a default COXSpinCtrl method of delta value computation (Delta pixel = Delta value).
|
|
m_ctlSpinZoom.SetComputationMethod(OX_SPIN_DELTA_PIXEL_IS_DELTA_VALUE);
|
|
|
|
UpdateData(FALSE);
|
|
|
|
ShowControls();
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CScaleRollupDlg::ShowControls()
|
|
{
|
|
if(m_nZoomLevel>ID_MAX_ZOOM_LEVEL)
|
|
m_nZoomLevel=ID_MAX_ZOOM_LEVEL;
|
|
|
|
CRect rectPicture, rectNewPicture;
|
|
CPoint ptPictureCenter;
|
|
|
|
m_nScaledWidth=((long)m_nOrigWidth*(long)m_nZoomLevel)/(100L);
|
|
m_nScaledHeight=((long)m_nOrigHeight*(long)m_nZoomLevel)/(100L);
|
|
|
|
m_ctlPicture.GetWindowRect(&rectPicture);
|
|
ScreenToClient(&rectPicture);
|
|
|
|
ptPictureCenter.x=rectPicture.left+rectPicture.Width()/2;
|
|
ptPictureCenter.y=rectPicture.top+rectPicture.Height()/2;
|
|
|
|
// we chose this formula because it let the picture control
|
|
// to go from 10% to 1000%
|
|
int nPictureWidth=(3*(int)sqrt((float)m_nZoomLevel)-(int)sqrt((float)m_nZoomLevel)/2)*2;
|
|
|
|
rectNewPicture.left=ptPictureCenter.x-nPictureWidth/2;
|
|
rectNewPicture.top=ptPictureCenter.y-nPictureWidth/2;
|
|
rectNewPicture.right=rectNewPicture.left+nPictureWidth;
|
|
rectNewPicture.bottom=rectNewPicture.top+nPictureWidth;
|
|
|
|
if(rectNewPicture.left-rectPicture.left!=0)
|
|
{
|
|
m_ctlPicture.MoveWindow(rectNewPicture.left, rectNewPicture.top,
|
|
rectNewPicture.Width(), rectNewPicture.Height());
|
|
}
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
|