📄 printmac.cpp
字号:
(**m_macPrintSettings).iPrVersion = 0; // something invalid (**m_macPrintSettings).prInfo.iHRes = 72; (**m_macPrintSettings).prInfo.iVRes = 72; Rect r1 = { 0, 0, 8*72 - 2 * 18, 11*72 - 2 * 36 }; (**m_macPrintSettings).prInfo.rPage = r1;// must have its top left & (0,0) Rect r2 = { -18, -36, 8*72 - 18, 11*72 - 36 }; (**m_macPrintSettings).rPaper = r2; (**m_macPrintSettings).prStl.iPageV = 11 * 120 ; // 11 inches in 120th of an inch (**m_macPrintSettings).prStl.iPageH = 8 * 120 ; // 8 inches in 120th of an inch } else { }}void wxMacClassicPrintData::TransferFrom( wxPrintData* data ){ ValidateOrCreate() ; (**m_macPrintSettings).prJob.iCopies = data->GetNoCopies() ; // on mac the paper rect has a negative top left corner, because the page rect (printable area) is at 0,0 // if all printing data is consolidated in on structure we will be able to set additional infos about pages}void wxMacClassicPrintData::TransferTo( wxPrintData* data ){ data->SetNoCopies( (**m_macPrintSettings).prJob.iCopies ); data->SetPaperSize( wxSize( ((double) (**m_macPrintSettings).rPaper.right - (**m_macPrintSettings).rPaper.left ) * pt2mm , ((double) (**m_macPrintSettings).rPaper.bottom - (**m_macPrintSettings).rPaper.top ) * pt2mm ) ) ;}void wxMacClassicPrintData::TransferFrom( wxPageSetupData *data ){}void wxMacClassicPrintData::TransferTo( wxPageSetupData* data ){ data->SetMinMarginTopLeft( wxPoint( ((double) (**m_macPrintSettings).prInfo.rPage.left -(**m_macPrintSettings).rPaper.left ) * pt2mm , ((double) (**m_macPrintSettings).prInfo.rPage.top -(**m_macPrintSettings).rPaper.top ) * pt2mm ) ) ; data->SetMinMarginBottomRight( wxPoint( ((double) (**m_macPrintSettings).rPaper.right - (**m_macPrintSettings).prInfo.rPage.right ) * pt2mm , ((double)(**m_macPrintSettings).rPaper.bottom - (**m_macPrintSettings).prInfo.rPage.bottom ) * pt2mm ) ) ;}void wxMacClassicPrintData::TransferFrom( wxPrintDialogData* data ){ int toPage = data->GetToPage(); if (toPage < 1) toPage = data->GetFromPage(); (**m_macPrintSettings).prJob.iFstPage = data->GetFromPage() ; (**m_macPrintSettings).prJob.iLstPage = toPage;}void wxMacClassicPrintData::TransferTo( wxPrintDialogData* data ){ data->SetFromPage( (**m_macPrintSettings).prJob.iFstPage ) ; data->SetToPage( (**m_macPrintSettings).prJob.iLstPage ) ;}void wxMacClassicPrintData::CopyFrom( wxNativePrintData* data ){ DisposeHandle( (Handle) m_macPrintSettings ) ; m_macPrintSettings = ((wxMacClassicPrintData*)data)->m_macPrintSettings; HandToHand( (Handle*) &m_macPrintSettings );}int wxMacClassicPrintData::ShowPrintDialog(){ int result = wxID_CANCEL ; OSErr err = noErr ; wxString message ; err = ::UMAPrOpen() ; if ( err == noErr ) { if ( ::PrJobDialog( m_macPrintSettings ) ) { result = wxID_OK ; } } else { message.Printf( wxT("Print Error %d"), err ) ; wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; dialog.ShowModal(); } ::UMAPrClose() ; return result ;}int wxMacClassicPrintData::ShowPageSetupDialog(){ int result = wxID_CANCEL ; OSErr err = noErr ; wxString message ; err = ::UMAPrOpen() ; if ( err == noErr ) { if ( ::PrStlDialog( m_macPrintSettings ) ) { result = wxID_OK ; } } else { message.Printf( wxT("Print Error %d"), err ) ; wxMessageDialog dialog( NULL , message , wxEmptyString , wxICON_HAND | wxOK) ; dialog.ShowModal(); } ::UMAPrClose() ; return result ;}#endif/** Printer*/wxMacPrinter::wxMacPrinter(wxPrintDialogData *data):wxPrinterBase(data){}wxMacPrinter::~wxMacPrinter(void){}bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt){ sm_abortIt = false; sm_abortWindow = NULL; if (!printout) return false; printout->SetIsPreview(false); if (m_printDialogData.GetMinPage() < 1) m_printDialogData.SetMinPage(1); if (m_printDialogData.GetMaxPage() < 1) m_printDialogData.SetMaxPage(9999); // Create a suitable device context wxPrinterDC *dc = NULL; if (prompt) { wxPrintDialog dialog(parent, & m_printDialogData); if (dialog.ShowModal() == wxID_OK) { dc = dialog.GetPrintDC(); m_printDialogData = dialog.GetPrintDialogData(); } } else { dc = new wxPrinterDC( m_printDialogData.GetPrintData() ) ; } // May have pressed cancel. if (!dc || !dc->Ok()) { if (dc) delete dc; return false; } // on the mac we have always pixels as addressing mode with 72 dpi printout->SetPPIScreen(72, 72); printout->SetPPIPrinter(72, 72); // Set printout parameters printout->SetDC(dc); int w, h; wxCoord ww, hh; dc->GetSize(&w, &h); printout->SetPageSizePixels((int)w, (int)h); printout->SetPaperRectPixels(dc->GetPaperRect()); dc->GetSizeMM(&ww, &hh); printout->SetPageSizeMM((int)ww, (int)hh); // Create an abort window wxBeginBusyCursor(); printout->OnPreparePrinting(); // Get some parameters from the printout, if defined int fromPage, toPage; int minPage, maxPage; printout->GetPageInfo(&minPage, &maxPage, &fromPage, &toPage); if (maxPage == 0) { wxEndBusyCursor(); return false; } // Only set min and max, because from and to have been // set by the user m_printDialogData.SetMinPage(minPage); m_printDialogData.SetMaxPage(maxPage); wxWindow *win = CreateAbortWindow(parent, printout); wxSafeYield(win,true); if (!win) { wxEndBusyCursor(); wxMessageBox(wxT("Sorry, could not create an abort dialog."), wxT("Print Error"), wxOK, parent); delete dc; return false; } sm_abortWindow = win; sm_abortWindow->Show(true); wxSafeYield(win,true); printout->OnBeginPrinting(); bool keepGoing = true; int copyCount; for (copyCount = 1; copyCount <= m_printDialogData.GetNoCopies(); copyCount ++) { if (!printout->OnBeginDocument(m_printDialogData.GetFromPage(), m_printDialogData.GetToPage())) { wxEndBusyCursor(); wxMessageBox(wxT("Could not start printing."), wxT("Print Error"), wxOK, parent); break; } if (sm_abortIt) break; int pn; for (pn = m_printDialogData.GetFromPage(); keepGoing && (pn <= m_printDialogData.GetToPage()) && printout->HasPage(pn); pn++) { if (sm_abortIt) { keepGoing = false; break; } else {#if TARGET_CARBON if ( UMAGetSystemVersion() >= 0x1000 )#endif { GrafPtr thePort ; GetPort( &thePort ) ; wxSafeYield(win,true); SetPort( thePort ) ; } dc->StartPage(); keepGoing = printout->OnPrintPage(pn); dc->EndPage(); } } printout->OnEndDocument(); } printout->OnEndPrinting(); if (sm_abortWindow) { sm_abortWindow->Show(false); delete sm_abortWindow; sm_abortWindow = NULL; } wxEndBusyCursor(); delete dc; return true;}wxDC* wxMacPrinter::PrintDialog(wxWindow *parent){ wxDC* dc = (wxDC*) NULL; wxPrintDialog dialog(parent, & m_printDialogData); int ret = dialog.ShowModal(); if (ret == wxID_OK) { dc = dialog.GetPrintDC(); m_printDialogData = dialog.GetPrintDialogData(); } return dc;}bool wxMacPrinter::Setup(wxWindow *parent){#if 0 wxPrintDialog dialog(parent, & m_printDialogData); dialog.GetPrintDialogData().SetSetupDialog(true); int ret = dialog.ShowModal(); if (ret == wxID_OK) { m_printDialogData = dialog.GetPrintDialogData(); } return (ret == wxID_OK);#endif return wxID_CANCEL;}/** Print preview*/wxMacPrintPreview::wxMacPrintPreview(wxPrintout *printout, wxPrintout *printoutForPrinting, wxPrintDialogData *data) : wxPrintPreviewBase(printout, printoutForPrinting, data){ DetermineScaling();}wxMacPrintPreview::wxMacPrintPreview(wxPrintout *printout, wxPrintout *printoutForPrinting, wxPrintData *data):wxPrintPreviewBase(printout, printoutForPrinting, data){ DetermineScaling();}wxMacPrintPreview::~wxMacPrintPreview(void){}bool wxMacPrintPreview::Print(bool interactive){ if (!m_printPrintout) return false; wxMacPrinter printer(&m_printDialogData); return printer.Print(m_previewFrame, m_printPrintout, interactive);}void wxMacPrintPreview::DetermineScaling(void){ int screenWidth , screenHeight ; wxDisplaySize( &screenWidth , &screenHeight ) ; wxSize ppiScreen( 72 , 72 ) ; wxSize ppiPrinter( 72 , 72 ) ; m_previewPrintout->SetPPIScreen( ppiScreen.x , ppiScreen.y ) ; wxCoord w , h ; wxCoord ww, hh; wxRect paperRect; // Get a device context for the currently selected printer wxPrinterDC printerDC(m_printDialogData.GetPrintData()); if (printerDC.Ok()) { printerDC.GetSizeMM(&ww, &hh); printerDC.GetSize( &w , &h ) ; ppiPrinter = printerDC.GetPPI() ; paperRect = printerDC.GetPaperRect(); m_isOk = true ; } else { // use some defaults w = 8 * 72 ; h = 11 * 72 ; ww = (wxCoord) (w * 25.4 / ppiPrinter.x) ; hh = (wxCoord) (h * 25.4 / ppiPrinter.y) ; paperRect = wxRect(0, 0, w, h); m_isOk = false ; } m_previewPrintout->SetPageSizeMM(ww, hh); m_previewPrintout->SetPageSizePixels(w , h) ; m_previewPrintout->SetPaperRectPixels(paperRect); m_pageWidth = w; m_pageHeight = h; m_previewPrintout->SetPPIPrinter( ppiPrinter.x , ppiPrinter.y ) ; m_previewScaleX = float(ppiScreen.x) / ppiPrinter.x; m_previewScaleY = float(ppiScreen.y) / ppiPrinter.y;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -