📄 custompreview.cpp
字号:
// CustomPreview.cpp : implementation file
//
#include "stdafx.h"
#include "conndot.h"
#include "CustomPreview.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCustomPreview
IMPLEMENT_DYNCREATE(CCustomPreview, CPreviewView)
CCustomPreview::CCustomPreview()
{
editmode=FALSE;
}
CCustomPreview::~CCustomPreview()
{
}
BEGIN_MESSAGE_MAP(CCustomPreview, CPreviewView)
//{{AFX_MSG_MAP(CCustomPreview)
ON_WM_RBUTTONDOWN()
ON_WM_LBUTTONDOWN()
ON_COMMAND(ID_EDITMODE, OnEditMode)
ON_UPDATE_COMMAND_UI(ID_EDITMODE, OnUpdateEditMode)
ON_WM_SETCURSOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCustomPreview drawing
/////////////////////////////////////////////////////////////////////////////
// CCustomPreview diagnostics
#ifdef _DEBUG
void CCustomPreview::AssertValid() const
{
CView::AssertValid();
}
void CCustomPreview::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CCustomPreview message handlers
void CCustomPreview::OnRButtonDown(UINT nFlags, CPoint point)
{
if (editmode)
{
ConvertPoint(point);
// move current point only
CPoint mover=point;
mover.x=-mover.x;
mover.y=-mover.y;
GetDocument()->points.Add(mover);
}
else
CPreviewView::OnRButtonDown(nFlags, point);
}
void CCustomPreview::OnLButtonDown(UINT nFlags, CPoint point)
{
if (editmode)
{
CConndotDoc *doc=GetDocument();
ConvertPoint(point);
doc->points.Add(point);
doc->UpdateAllViews(NULL);
}
else
CPreviewView::OnLButtonDown(nFlags, point);
}
CConndotDoc *CCustomPreview::GetDocument()
{
return (CConndotDoc *)CPreviewView::GetDocument();
}
void CCustomPreview::ConvertPoint(CPoint & point)
{
// assuming 1 page only visible
// if that isn't a good assumption, you'd need to test to see which page
// you were on by testing the rectScreen member of each element in the
// m_pPageInfo array
// Don't forget preview uses sizeScaleRatio as a fraction, not
// a x,y scaling factor
CPoint ViewportOrg;
if (m_nZoomState != ZOOM_OUT)
ViewportOrg = -GetDeviceScrollPosition();
else
ViewportOrg=GetDC()->GetViewportOrg();
m_pPreviewDC->SetScaleRatio(m_pPageInfo[m_nCurrentPage-1].sizeScaleRatio.cx,m_pPageInfo[m_nCurrentPage-1].sizeScaleRatio.cy);
// figure size of margin
CSize PrintOffset;
m_pPreviewDC->Escape(GETPRINTINGOFFSET, 0, NULL, (LPVOID)&PrintOffset);
m_pPreviewDC->PrinterDPtoScreenDP((LPPOINT)&PrintOffset);
PrintOffset += (CSize)m_pPageInfo[m_nCurrentPage-1].rectScreen.TopLeft();
PrintOffset += CSize(1, 1);
PrintOffset += (CSize)ViewportOrg; // For Scrolling
point-=PrintOffset;
// adjust point for page position
point.x = MulDiv(point.x, m_pPageInfo[m_nCurrentPage-1].sizeScaleRatio.cy,m_pPageInfo[m_nCurrentPage-1].sizeScaleRatio.cx);
point.y = MulDiv(point.y, m_pPageInfo[m_nCurrentPage-1].sizeScaleRatio.cy,m_pPageInfo[m_nCurrentPage-1].sizeScaleRatio.cx);
}
void CCustomPreview::OnEditMode()
{
editmode=!editmode;
}
void CCustomPreview::OnUpdateEditMode(CCmdUI* pCmdUI)
{
pCmdUI->SetText(editmode?"Zoom":"Edit");
pCmdUI->Enable();
}
BOOL CCustomPreview::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if (editmode && nHitTest==HTCLIENT)
{
::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
return TRUE;
}
else
return CPreviewView::OnSetCursor(pWnd, nHitTest, message);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -