mfcprintdemoview.cpp

来自「Visual_C++[1].NET_Bible1 Visual_C++宝典书中」· C++ 代码 · 共 164 行

CPP
164
字号
// lmouseup, lmousedown, mousemove
// 

// MFCPrintDemoView.cpp : implementation of the CMFCPrintDemoView class
//

#include "stdafx.h"
#include "MFCPrintDemo.h"

#include "MFCPrintDemoDoc.h"
#include "MFCPrintDemoView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CMFCPrintDemoView

IMPLEMENT_DYNCREATE(CMFCPrintDemoView, CScrollView)

BEGIN_MESSAGE_MAP(CMFCPrintDemoView, CScrollView)
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()

// CMFCPrintDemoView construction/destruction

CMFCPrintDemoView::CMFCPrintDemoView()
: m_rectPrint(0,0,11505,-15105)
, m_sizePage(11520, 15120)
, m_sizePageScroll(m_sizePage.cx / 2, m_sizePage.cy / 2)
, m_sizeLineScroll(m_sizePage.cx / 100, m_sizePage.cy / 100)
{
}

CMFCPrintDemoView::~CMFCPrintDemoView()
{
}

BOOL CMFCPrintDemoView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CScrollView::PreCreateWindow(cs);
}

// CMFCPrintDemoView drawing

void CMFCPrintDemoView::OnDraw(CDC* pDC)
{
  DrawRulers(*pDC);
  DrawData(*pDC);
}

void CMFCPrintDemoView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();
	SetScrollSizes(MM_TWIPS, 
    m_sizePage, 
    m_sizePageScroll,
    m_sizeLineScroll);
}


// CMFCPrintDemoView printing

BOOL CMFCPrintDemoView::OnPreparePrinting(CPrintInfo* pInfo)
{
  pInfo->SetMaxPage(1);
	return DoPreparePrinting(pInfo);
}

void CMFCPrintDemoView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CMFCPrintDemoView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}


// CMFCPrintDemoView diagnostics

#ifdef _DEBUG
void CMFCPrintDemoView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CMFCPrintDemoView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CMFCPrintDemoDoc* CMFCPrintDemoView::GetDocument() const // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFCPrintDemoDoc)));
	return (CMFCPrintDemoDoc*)m_pDocument;
}
#endif //_DEBUG

void CMFCPrintDemoView::DrawRulers(CDC& dc)
{
  // Draw a border around the page
  dc.Rectangle(m_rectPrint);

  CString str;

  // Draw horizontal and vertical rulers
  for (int i = 0; i <= 8; i++) 
  {
    str.Format("%02d", i);
    dc.TextOut(i * 1440, 0, str);
  }

  for (int i = 0; i <= 10; i++) 
  {
    str.Format("%02d", i);
    dc.TextOut(0, -i * 1440, str);
  }

  dc.MoveTo(0, -(m_sizePage.cy / 2));
  dc.LineTo(m_sizePage.cx, -(m_sizePage.cy / 2));
}

void CMFCPrintDemoView::DrawData(CDC& dc)
{
	CMFCPrintDemoDoc* pDoc = (CMFCPrintDemoDoc*)GetDocument();
	ASSERT_VALID(pDoc);

  CFont font;
  font.CreateFont(-200, 0, 0, 0, 400, FALSE, FALSE, 0, ANSI_CHARSET,
                  OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
                  DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,
                  "Arial");
  CFont* pOldFont = (CFont*) dc.SelectObject(&font);
  TEXTMETRIC tm;
  dc.GetTextMetrics(&tm);
  int nHeight = tm.tmHeight + tm.tmExternalLeading;

  int i;
  int dataSize = pDoc->m_data.GetSize();

  int cy = -(m_sizePage.cy / 2);
  cy += (dataSize / 2) * nHeight;

  int cx;

  for (i = 0; i < dataSize; i++) 
  {
    CSize size = dc.GetTextExtent(pDoc->m_data[i]);
    
    cx = (m_sizePage.cx - size.cx) / 2;
    dc.TextOut(cx, cy - (i * nHeight), pDoc->m_data[i]);
  }

  dc.SelectObject(pOldFont);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?