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

📄 printmac.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        (**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 + -