📄 printout.cpp
字号:
/* * Roadnav * Printout.cpp * * Copyright (c) 2004 - 2007 Richard L. Lynch <rllynch@users.sourceforge.net> * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public License * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ ///////////////////////////////////////////////////////////////////////////////// \file////// This file contains the Printout class, which is responsible/// for making a MapControl print to a printer or preview window/////////////////////////////////////////////////////////////////////////////////#ifdef HAVE_CONFIG_H# include <config.h>#endif#ifdef _MSC_VER#pragma warning(disable: 4786)#endif#include <wx/wx.h>#include <wx/print.h>#include "Printout.h"//////////////////////////////////////////////////////////////////////////////////// \brief Printout constructor - remember the supplied variables, call base class/// constructor/////////////////////////////////////////////////////////////////////////////////Printout::Printout(wxString strTitle, MapControl * pctlMap) : wxPrintout(strTitle), m_pctlMap(pctlMap) {}//////////////////////////////////////////////////////////////////////////////////// \brief Called to print a single page (the only page)/////////////////////////////////////////////////////////////////////////////////bool Printout::OnPrintPage(int page){ wxDC *dc = GetDC(); if (dc) { int ppiScreenX, ppiScreenY; int ppiPrinterX, ppiPrinterY; double ppiDCX, ppiDCY; int iMarginX; int iMarginY; int iDrawingWidth; int iDrawingHeight; // real dimensions of a page int pageWidth, pageHeight; // dimensions we'll use for this int iDCWidth, iDCHeight; double fOldDrawingScale; // these will be the same if using the printer // but different if previewing GetPPIScreen(&ppiScreenX, &ppiScreenY); GetPPIPrinter(&ppiPrinterX, &ppiPrinterY); dc->GetSize(&iDCWidth, &iDCHeight); GetPageSizePixels(&pageWidth, &pageHeight); ppiDCX = (double) ppiPrinterX * iDCWidth / pageWidth; ppiDCY = (double) ppiPrinterY * iDCHeight / pageHeight; // one inch margin iMarginX = (int) (1.0 * ppiDCX); iMarginY = (int) (1.0 * ppiDCY); iDrawingWidth = iDCWidth - 2 * iMarginX; iDrawingHeight = iDCHeight - 2 * iMarginY; dc->SetDeviceOrigin(iMarginX, iMarginY); dc->SetClippingRegion(0, 0, iDrawingWidth, iDrawingHeight); fOldDrawingScale = m_pctlMap->GetDrawingScaleFactor(); m_pctlMap->SetDrawingScaleFactor(ppiDCX / ppiScreenX); m_pctlMap->DrawAll(dc, wxSize(iDrawingWidth, iDrawingHeight), true); m_pctlMap->SetDrawingScaleFactor(fOldDrawingScale); dc->DestroyClippingRegion(); return TRUE; } else return FALSE;}//////////////////////////////////////////////////////////////////////////////////// \brief Indicates if a certain page is present. Currently, there's only one page./////////////////////////////////////////////////////////////////////////////////bool Printout::HasPage(int page){ if (page == 1) return true; return false;}//////////////////////////////////////////////////////////////////////////////////// \brief Returns info about how many pages there are./////////////////////////////////////////////////////////////////////////////////void Printout::GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo){ *minPage = 1; *maxPage = 1; *selPageFrom = 1; *selPageTo = 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -