// PrintView.cpp : 实现文件 // #include "stdafx.h" #include "PrintView.h" #include ".\mypreviewview.h" #include // CPrintView IMPLEMENT_DYNCREATE(CPrintView, CView) CPrintView::CPrintView() { } CPrintView::~CPrintView() { } BEGIN_MESSAGE_MAP(CPrintView, CView) END_MESSAGE_MAP() // CPrintView 绘图 void CPrintView::OnDraw(CDC* pDC) { // TODO: 在此添加绘制代码 } // CPrintView 诊断 #ifdef _DEBUG void CPrintView::AssertValid() const { CView::AssertValid(); } void CPrintView::Dump(CDumpContext& dc) const { CView::Dump(dc); } #endif //_DEBUG // CPrintView 消息处理程序 BOOL CPrintView::OnPreparePrinting(CPrintInfo* pInfo) { // TODO: 调用 DoPreparePrinting 以调用“打印”对话框 if(m_pPrintWnd) { m_pPrintWnd->OnPreparePrinting(pInfo); } return DoPreparePrinting(pInfo); } void CPrintView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) { // TODO: 在此添加专用代码和/或调用基类 CView::OnPrepareDC(pDC, pInfo); } void CPrintView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo) { // TODO: 在此添加专用代码和/或调用基类 CView::OnEndPrinting(pDC, pInfo); } void CPrintView::OnEndPrintPreview(CDC* pDC, CPrintInfo* pInfo, POINT point, CPreviewView* pView) { // TODO: 在此添加专用代码和/或调用基类 CView::OnEndPrintPreview(pDC, pInfo, point, pView); GetParentFrame()->DestroyWindow(); } void CPrintView::OnPrint(CDC* pDC, CPrintInfo* pInfo) { // TODO: 在此添加专用代码和/或调用基类 m_pPrintWnd->OnPrinting(pDC, pInfo); } void CPrintView::DoPrintPreviewX() { //SetPrintDialog(); if(m_pPrintWnd) { CPrintPreviewState* pState = new CPrintPreviewState; if(!DoPrintPreview(AFX_IDD_PREVIEW_TOOLBAR, this, RUNTIME_CLASS(CMyPreviewView), pState)) { delete pState; } CFrameWnd *pFrameWnd = m_pPrintWnd->m_pPrintFrameWnd; CMyPreviewView *pMyPreview = (CMyPreviewView*)pFrameWnd->GetActiveView(); pMyPreview->SetPrintWnd(m_pPrintWnd); } } void CPrintView::SetPrintWnd(CPrintXDlg *pWnd) { m_pPrintWnd = pWnd; } void CPrintView::DoPrintFileX() { //CString strPrinter = GetDefaultPrinter(); CPrintInfo PrintInfo; if(!PrintInfo.m_pPD) { return; } OnPreparePrinting(&PrintInfo); CString strTitle = "测试项目"; CString strPortName; UINT nFormatID; DOCINFO doc; memset(&doc, 0, sizeof(DOCINFO)); doc.cbSize = sizeof(DOCINFO); doc.lpszDocName = strTitle; doc.lpszOutput = NULL; strPortName = PrintInfo.m_pPD->GetPortName(); nFormatID = AFX_IDS_PRINTONPORT; CDC PrintDC; if (!PrintInfo.m_bDocObject) { PrintDC.Attach(PrintInfo.m_pPD->m_pd.hDC); // attach printer dc PrintDC.m_bPrinting = TRUE; } OnBeginPrinting(&PrintDC, &PrintInfo); if(PrintDC.m_hDC == NULL) { return; } PrintDC.StartDoc(&doc); UINT nEndPage = PrintInfo.GetToPage(); UINT nStartPage = PrintInfo.GetFromPage(); for(PrintInfo.m_nCurPage = nStartPage; PrintInfo.m_nCurPage <= nEndPage; PrintInfo.m_nCurPage++) { OnPrepareDC(&PrintDC, &PrintInfo); PrintDC.StartPage(); OnPrint(&PrintDC, &PrintInfo); PrintDC.EndPage(); } PrintDC.EndDoc(); OnEndPrinting(&PrintDC, &PrintInfo); // clean up after printing PrintDC.Detach(); // will be cleaned up by CPrintInfo destructor }