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

📄 printview.cpp

📁 图书管理系统
💻 CPP
字号:
// PrintView.cpp : implementation file
//

#include "stdafx.h"
#include "bbb.h"
#include "PrintView.h"
#include "Report.h"
#include "PrintDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPrintView
IMPLEMENT_DYNCREATE(CPrintView, CScrollView)

BEGIN_MESSAGE_MAP(CPrintView, CScrollView)
	//{{AFX_MSG_MAP(CPrintView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// 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()



CPrintView::CPrintView()
{
	ispreview = false;
}

CPrintView::~CPrintView()
{
}

/////////////////////////////////////////////////////////////////////////////
// CPrintView drawing

void CPrintView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	CSize sizeTotal;
	// TODO: calculate the total size of this view
	sizeTotal.cx = sizeTotal.cy = 100;
	SetScrollSizes(MM_TEXT, sizeTotal);
/*	CDC* pDC;
	pDC=this->GetDC();
	//逻辑设备大小
	caps.cx=pDC->GetDeviceCaps(HORZRES);
	caps.cy=pDC->GetDeviceCaps(VERTRES);*/
}

void CPrintView::OnDraw(CDC* pDC)
{
	CPrintDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	//pInfo->m_pPD->GetDevMode();
	

	caps.cx=pDC->GetDeviceCaps(HORZRES);
	caps.cy=pDC->GetDeviceCaps(VERTRES);

	DrawReportTitle( pDC,report.title,false);
	
	report.fieldcount = 6;

	DrawBody(pDC,false);
}

/////////////////////////////////////////////////////////////////////////////
// CPrintView diagnostics

void CPrintView::DrawReportTitle(CDC* pDC,LPCSTR r_title,bool printed)
{
	PrintRate factrate;
	factrate.x =1.0;
	factrate.y =1.0;
	if (printed ==true)
	{
		factrate = rate;
	}	
	titlefont.CreatePointFont(200,"黑体",pDC);
	CRect rect;
	GetClientRect(rect);
	CString temp,line;
	pDC->SelectObject(&titlefont);
	line = "";

	temp = r_title;
	int len =temp.GetLength();
	for (int i = 0; i<len;i++)
	{
		line += "_";
	}
	//打印标题
	if (printed)
	{
		pDC->SetTextColor(RGB(255,0,0));
		pDC->DrawText(line,CRect(0,factrate.y*20, caps.cx,factrate.y*100),DT_CENTER|DT_TOP|DT_SINGLELINE);
		pDC->SetTextColor(RGB(0,0,0));
		pDC->DrawText(r_title,CRect(0,factrate.y*10, caps.cx,factrate.y*100),DT_CENTER|DT_TOP|DT_SINGLELINE);	
	}
	else
	{
		pDC->SetTextColor(RGB(255,0,0));
		pDC->DrawText(line,CRect(0,20, rect.right,100),DT_CENTER|DT_TOP|DT_SINGLELINE);
		pDC->SetTextColor(RGB(0,0,0));
		pDC->DrawText(r_title,CRect(0,10, rect.right,100),DT_CENTER|DT_TOP|DT_SINGLELINE);

	}
	titlefont.DeleteObject();
}
/***********************************************************************************************
说明:  打印报表字段
***********************************************************************************************/
void CPrintView::DrawBody(CDC *pDC,bool printed)
{
	PrintRate factrate;
	factrate.x =1.0;
	factrate.y =1.0;
	if (printed ==true)
	{
		factrate = rate;
	}
	bodyfont.CreatePointFont(100,"宋体",pDC);
	CRect rect;
	GetClientRect(rect);
	pDC->SelectObject(&bodyfont);
	//计算字段的总长度
	int fieldwidth = 0;
	for (int index = 0; index <report.fieldcount;index++)
	{
		fieldwidth +=  pDC->GetTextExtent(report.fields[index]).cx;
	}
	//计算字段间距
	int fieldinterval = 0;
	if (printed)
		fieldinterval = (caps.cx- factrate.x*report.lmargin- factrate.x*(report.rmargin+fieldwidth))/(report.fieldcount-1);
	else
		fieldinterval = (rect.right- factrate.x*report.lmargin- factrate.x*report.rmargin-fieldwidth)/(report.fieldcount-1);

	int temp = 0;

	//打印字段
	for (int i =0; i< report.fieldcount;i++)
	{
		if (printed)
		{
			pDC->TextOut( factrate.x*report.lmargin+ (i*fieldinterval+temp),factrate.x*80,report.fields[i]);
			
			//pDC->TextOut(factrate.x*(report.lmargin)+ (i*fieldinterval+temp),factrate.x*80,report.fields[i]);
			temp+= factrate.x*pDC->GetTextExtent(report.fields[i]).cx;
		}
		else
		{
			pDC->TextOut((report.lmargin)+ i*fieldinterval+temp,80,report.fields[i]);
			temp+= pDC->GetTextExtent(report.fields[i]).cx;				
		}
	}
	if (printed)
	{
		pDC->MoveTo( factrate.x *report.lmargin, factrate.x*100);
		pDC->LineTo(factrate.x *report.lmargin +temp+(i-1)*fieldinterval-50,factrate.x*100); 
	}
	else
	{
		pDC->MoveTo( report.lmargin, 100);
		pDC->LineTo((report.lmargin)+ temp+(i-1)*fieldinterval,100); 	

	}

	//绘制报表数据
	if (report.m_plist != NULL)
	{
		for (int row =0; row< report.m_plist->GetItemCount();row++)
		{
			temp = 0;
			for (int col = 0;col< report.fieldcount;col++)
			{
				if (printed)
				{
					pDC->TextOut(factrate.x*report.lmargin+ col*fieldinterval+temp, factrate.x*( 120+ row* report.verinterval),report.m_plist->GetItemText(row,col));
					temp+=  factrate.x*pDC->GetTextExtent(report.fields[col]).cx;			
				}
				else
				{					
					pDC->TextOut(report.lmargin+ col*fieldinterval+temp,( 120+ row* report.verinterval),report.m_plist->GetItemText(row,col));
					temp+= pDC->GetTextExtent(report.fields[col]).cx;								
				}
			}
		}
	}
	bodyfont.DeleteObject();
}

void CPrintView::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
{
	if(pInfo->m_nCurPage==1)
	{
		//画主标题
		DrawReportTitle( pDC,report.title,true);
		//画报表主体数据
		DrawBody(pDC,true);
	}
	else
	{	
		DrawBody(pDC,true);
	}
	//PrintPage(pDC,pInfo);
}

void CPrintView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) 
{
	LPDEVMODE mode;
	//pInfo->m_pPD->GetDevMode();
	mode=pInfo->m_pPD->GetDevMode();
	//打印纸大小
	pagesize.cx =mode->dmPaperLength;
	pagesize.cy= mode->dmPaperWidth;
	//逻辑设备大小

	caps.cx=pDC->GetDeviceCaps(HORZRES);
	caps.cy=pDC->GetDeviceCaps(VERTRES);

	//比率
	rate.x=(float)pagesize.cx/(float)caps.cx;
	rate.y=(float)pagesize.cy/(float)caps.cy;
	//打印页数
	//pInfo->SetMaxPage(100);
	ispreview = true;	
	//Deffont.CreatePointFont(280*Ratio.x,"宋体",NULL);
//	CScrollView::OnBeginPrinting(pDC, pInfo);
}

void CPrintView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	CScrollView::OnPrepareDC(pDC, pInfo);
}

void CPrintView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo) 
{
	
	//CScrollView::OnEndPrinting(pDC, pInfo);
}

BOOL CPrintView::PreCreateWindow(CREATESTRUCT& cs) 
{
	
	return CScrollView::PreCreateWindow(cs);
}

BOOL CPrintView::OnPreparePrinting(CPrintInfo* pInfo) 
{
	return DoPreparePrinting(pInfo);
	//return CScrollView::OnPreparePrinting(pInfo);
}

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

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

CPrintDoc* CPrintView::GetDocument()
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPrintDoc)));
	return (CPrintDoc*)m_pDocument;
}
#endif //_DEBUG

void CPrintView::OnEndPrintPreview(CDC* pDC, CPrintInfo* pInfo, POINT point, CPreviewView* pView) 
{
	ispreview = false;
	CScrollView::OnEndPrintPreview(pDC, pInfo, point, pView);
}

⌨️ 快捷键说明

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