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

📄 printmac.cpp

📁 wxWidgets 是一个跨平台的 GUI 框架。它给开发人员提供了统一的接口
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{    UInt32 minPage , maxPage ;    PMGetPageRange( m_macPrintSettings , &minPage , &maxPage ) ;    data->SetMinPage( minPage ) ;    data->SetMaxPage( maxPage ) ;    UInt32 copies ;    PMGetCopies( m_macPrintSettings , &copies ) ;    data->SetNoCopies( copies ) ;    UInt32 from , to ;    PMGetFirstPage( m_macPrintSettings , &from ) ;    PMGetLastPage( m_macPrintSettings , &to ) ;    if ( to >= 0x7FFFFFFF ) //  due to an OS Bug we don't get back kPMPrintAllPages    {        data->SetAllPages( true ) ;        // This means all pages, more or less        data->SetFromPage(1);        data->SetToPage(32000);    }    else    {        data->SetFromPage( from ) ;        data->SetToPage( to ) ;        data->SetAllPages( false );    }}void wxMacCarbonPrintData::TransferFrom( wxPrintDialogData* data ){    PMSetPageRange( m_macPrintSettings , data->GetMinPage() , data->GetMaxPage() ) ;    PMSetCopies( m_macPrintSettings , data->GetNoCopies() , false ) ;    PMSetFirstPage( m_macPrintSettings , data->GetFromPage() , false ) ;    if (data->GetAllPages() || data->GetFromPage() == 0)        PMSetLastPage( m_macPrintSettings , (UInt32) kPMPrintAllPages, true ) ;    else        PMSetLastPage( m_macPrintSettings , (UInt32) data->GetToPage() , false ) ;}/** 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)    {        wxMacPrintDialog dialog(parent, & m_printDialogData);        if (dialog.ShowModal() == wxID_OK)        {            dc = wxDynamicCast(dialog.GetPrintDC(), wxPrinterDC);            wxASSERT(dc);            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);    PMResolution res;    wxMacCarbonPrintData* nativeData = (wxMacCarbonPrintData*)          (m_printDialogData.GetPrintData().GetNativeData());#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5     PMPrinter printer;    PMSessionGetCurrentPrinter(nativeData->m_macPrintSession, &printer);    PMPrinterGetOutputResolution( printer, nativeData->m_macPrintSettings, &res) ;#else    PMGetResolution((PMPageFormat) (nativeData->m_macPageFormat), &res);#endif    printout->SetPPIPrinter(int(res.hRes), int(res.vRes));    // Set printout parameters    printout->SetDC(dc);    int w, h;    dc->GetSize(&w, &h);    printout->SetPageSizePixels((int)w, (int)h);    printout->SetPaperRectPixels(dc->GetPaperRect());    wxCoord mw, mh;    dc->GetSizeMM(&mw, &mh);    printout->SetPageSizeMM((int)mw, (int)mh);    // 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                {#if !wxMAC_USE_CORE_GRAPHICS                    GrafPtr thePort ;                    GetPort( &thePort ) ;#endif                    wxSafeYield(win,true);#if !wxMAC_USE_CORE_GRAPHICS                    SetPort( thePort ) ;#endif                }                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 ) ;        // Note that with Leopard, screen dpi=72 is no longer a given    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_pageWidth = w;    m_pageHeight = h;        m_previewPrintout->SetPageSizePixels(w , h) ;    m_previewPrintout->SetPageSizeMM(ww, hh);    m_previewPrintout->SetPaperRectPixels(paperRect);    m_previewPrintout->SetPPIPrinter( ppiPrinter.x , ppiPrinter.y ) ;    m_previewScaleX = float(ppiScreen.x) / ppiPrinter.x;    m_previewScaleY = float(ppiScreen.y) / ppiPrinter.y;}#endif

⌨️ 快捷键说明

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