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

📄 custompreview.cpp

📁 讲mfc的书
💻 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 + -