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

📄 printmac.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        src/mac/classic/printwin.cpp// Purpose:     wxMacPrinter framework// Author:      Julian Smart// Modified by:// Created:     04/01/98// RCS-ID:      $Id: printmac.cpp,v 1.9 2006/10/27 13:07:27 JS Exp $// Copyright:   (c) Julian Smart// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////// For compilers that support precompilation, includes "wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif#ifndef WX_PRECOMP    #include "wx/utils.h"    #include "wx/dc.h"    #include "wx/app.h"    #include "wx/msgdlg.h"    #include "wx/dcprint.h"#endif#include "wx/mac/uma.h"#include "wx/mac/printmac.h"#include "wx/mac/private/print.h"#define mm2pt            2.83464566929#define pt2mm            0.352777777778#include "wx/printdlg.h"#include <stdlib.h>IMPLEMENT_DYNAMIC_CLASS(wxMacPrinter, wxPrinterBase)IMPLEMENT_CLASS(wxMacPrintPreview, wxPrintPreviewBase)#if TARGET_CARBONwxNativePrintData* wxNativePrintData::Create(){    return new wxMacCarbonPrintData() ;}wxMacCarbonPrintData::wxMacCarbonPrintData(){    m_macPageFormat = kPMNoPageFormat;    m_macPrintSettings = kPMNoPrintSettings;    m_macPrintSession = kPMNoReference ;    ValidateOrCreate() ;}wxMacCarbonPrintData::~wxMacCarbonPrintData(){    if (m_macPageFormat != kPMNoPageFormat)    {        (void)PMRelease(m_macPageFormat);        m_macPageFormat = kPMNoPageFormat;    }    if (m_macPrintSettings != kPMNoPrintSettings)    {        (void)PMRelease(m_macPrintSettings);        m_macPrintSettings = kPMNoPrintSettings;    }    if ( m_macPrintSession != kPMNoReference )    {        (void)PMRelease(m_macPrintSession);        m_macPrintSession = kPMNoReference;    }}void wxMacCarbonPrintData::ValidateOrCreate(){    OSStatus err = noErr ;    if ( m_macPrintSession == kPMNoReference )    {        err = PMCreateSession( (PMPrintSession *) &m_macPrintSession ) ;    }    //  Set up a valid PageFormat object.    if ( m_macPageFormat == kPMNoPageFormat)    {        err = PMCreatePageFormat((PMPageFormat *) &m_macPageFormat);        //  Note that PMPageFormat is not session-specific, but calling        //  PMSessionDefaultPageFormat assigns values specific to the printer        //  associated with the current printing session.        if ((err == noErr) &&            ( m_macPageFormat != kPMNoPageFormat))        {            err = PMSessionDefaultPageFormat((PMPrintSession) m_macPrintSession,                (PMPageFormat) m_macPageFormat);        }    }    else    {        err = PMSessionValidatePageFormat((PMPrintSession) m_macPrintSession,            (PMPageFormat) m_macPageFormat,            kPMDontWantBoolean);    }    //  Set up a valid PrintSettings object.    if ( m_macPrintSettings == kPMNoPrintSettings)    {        err = PMCreatePrintSettings((PMPrintSettings *) &m_macPrintSettings);        //  Note that PMPrintSettings is not session-specific, but calling        //  PMSessionDefaultPrintSettings assigns values specific to the printer        //  associated with the current printing session.        if ((err == noErr) &&            ( m_macPrintSettings != kPMNoPrintSettings))        {            err = PMSessionDefaultPrintSettings((PMPrintSession) m_macPrintSession,                (PMPrintSettings) m_macPrintSettings);        }    }    else    {        err = PMSessionValidatePrintSettings((PMPrintSession) m_macPrintSession,            (PMPrintSettings) m_macPrintSettings,            kPMDontWantBoolean);    }}void wxMacCarbonPrintData::TransferFrom( wxPrintData* data ){    ValidateOrCreate() ;    PMSetCopies( (PMPrintSettings) m_macPrintSettings , data->GetNoCopies() , false ) ;    PMSetOrientation( (PMPageFormat) m_macPageFormat , ( data->GetOrientation() == wxLANDSCAPE ) ?        kPMLandscape : kPMPortrait , false ) ;    // collate cannot be set#if 0 // not yet tested    if ( !m_printerName.empty() )        PMSessionSetCurrentPrinter( (PMPrintSession) m_macPrintSession , wxMacCFStringHolder( m_printerName , wxFont::GetDefaultEncoding() ) ) ;#endif    PMColorMode color ;    PMGetColorMode(  (PMPrintSettings) m_macPrintSettings, &color ) ;    if ( data->GetColour() )    {        if ( color == kPMBlackAndWhite )            PMSetColorMode( (PMPrintSettings) m_macPrintSettings, kPMColor ) ;    }    else        PMSetColorMode( (PMPrintSettings) m_macPrintSettings, kPMBlackAndWhite ) ;    // PMDuplexMode not yet accessible via API    // PMQualityMode not yet accessible via API    // todo paperSize}void wxMacCarbonPrintData::TransferTo( wxPrintData* data ){    OSStatus err = noErr ;    UInt32 copies ;    err = PMGetCopies( m_macPrintSettings , &copies ) ;    if ( err == noErr )        data->SetNoCopies( copies ) ;    PMOrientation orientation ;    err = PMGetOrientation(  m_macPageFormat , &orientation ) ;    if ( err == noErr )    {        if ( orientation == kPMPortrait || orientation == kPMReversePortrait )            data->SetOrientation( wxPORTRAIT  );        else            data->SetOrientation( wxLANDSCAPE );    }    // collate cannot be set#if 0    {        wxMacCFStringHolder name ;        PMPrinter printer ;        PMSessionGetCurrentPrinter( m_macPrintSession ,            &printer ) ;        m_printerName = name.AsString() ;    }#endif    PMColorMode color ;    err = PMGetColorMode( m_macPrintSettings, &color ) ;    if ( err == noErr )        data->SetColour( !(color == kPMBlackAndWhite) ) ;    // PMDuplexMode not yet accessible via API    // PMQualityMode not yet accessible via API    // todo paperSize    PMRect rPaper;    err = PMGetUnadjustedPaperRect( m_macPageFormat, &rPaper);    if ( err == noErr )    {        data->SetPaperSize( wxSize (            (int)(( rPaper.right - rPaper.left ) * pt2mm + 0.5 ) ,             (int)(( rPaper.bottom - rPaper.top ) * pt2mm + 0.5 ) ) );    }}void wxMacCarbonPrintData::TransferFrom( wxPageSetupData *data ){    // should we setup the page rect here ?    // since MacOS sometimes has two same paper rects with different    // page rects we could make it roundtrip safe perhaps#if TARGET_CARBON#else#endif}void wxMacCarbonPrintData::TransferTo( wxPageSetupData* data ){    PMRect rPaper;    OSStatus err = PMGetUnadjustedPaperRect(m_macPageFormat, &rPaper);    if ( err == noErr )    {        PMRect rPage ;        err = PMGetUnadjustedPageRect(m_macPageFormat , &rPage ) ;        if ( err == noErr )        {            data->SetMinMarginTopLeft( wxPoint (                (int)(((double) rPage.left - rPaper.left ) * pt2mm) ,                (int)(((double) rPage.top - rPaper.top ) * pt2mm) ) ) ;            data->SetMinMarginBottomRight( wxPoint (                (wxCoord)(((double) rPaper.right - rPage.right ) * pt2mm),                (wxCoord)(((double) rPaper.bottom - rPage.bottom ) * pt2mm)) ) ;        }    }}void wxMacCarbonPrintData::TransferTo( wxPrintDialogData* data ){    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 ) ;    data->SetFromPage( from ) ;    data->SetToPage( to ) ;}void wxMacCarbonPrintData::TransferFrom( wxPrintDialogData* data ){    PMSetPageRange( m_macPrintSettings , data->GetMinPage() , data->GetMaxPage() ) ;    PMSetCopies( m_macPrintSettings , data->GetNoCopies() , false ) ;    PMSetFirstPage( m_macPrintSettings , data->GetFromPage() , false ) ;    int toPage = data->GetToPage();    if (toPage < 1)        toPage = data->GetFromPage();    PMSetLastPage( m_macPrintSettings , toPage , false ) ;}void wxMacCarbonPrintData::CopyFrom( wxNativePrintData* d ){    wxMacCarbonPrintData *data = (wxMacCarbonPrintData*) d ;    if ( data->m_macPrintSession != kPMNoReference )        PMRetain( data->m_macPrintSession ) ;    if ( m_macPrintSession != kPMNoReference )    {        PMRelease( m_macPrintSession ) ;        m_macPrintSession = kPMNoReference ;    }    if ( data->m_macPrintSession != kPMNoReference )        m_macPrintSession = data->m_macPrintSession ;    if ( data->m_macPrintSettings != kPMNoPrintSettings )        PMRetain( data->m_macPrintSettings ) ;    if ( m_macPrintSettings != kPMNoPrintSettings )    {        PMRelease( m_macPrintSettings ) ;        m_macPrintSettings = kPMNoPrintSettings ;    }    if ( data->m_macPrintSettings != kPMNoPrintSettings )        m_macPrintSettings = data->m_macPrintSettings ;    if ( data->m_macPageFormat != kPMNoPageFormat )        PMRetain( data->m_macPageFormat ) ;    if ( m_macPageFormat != kPMNoPageFormat )    {        PMRelease( m_macPageFormat ) ;        m_macPageFormat = kPMNoPageFormat ;    }    if ( data->m_macPageFormat != kPMNoPageFormat )        m_macPageFormat = data->m_macPageFormat ;}int wxMacCarbonPrintData::ShowPrintDialog(){    int result = wxID_CANCEL ;    OSErr err = noErr ;    wxString message ;    Boolean        accepted;    {        //  Display the Print dialog.        if (err == noErr)        {            err = PMSessionPrintDialog( m_macPrintSession,                m_macPrintSettings,                m_macPageFormat,                &accepted);            if ((err == noErr) && !accepted)            {                err = kPMCancel; // user clicked Cancel button            }        }        if  ( err == noErr )        {            result = wxID_OK ;        }    }    if ((err != noErr) && (err != kPMCancel))    {        message.Printf( wxT("Print Error %d"), err ) ;        wxMessageDialog dialog( NULL , message  , wxEmptyString, wxICON_HAND | wxOK) ;        dialog.ShowModal();    }    return result ;}int wxMacCarbonPrintData::ShowPageSetupDialog(){    int      result = wxID_CANCEL ;    OSErr    err = noErr ;    wxString message ;    Boolean        accepted;    {        //  Display the Page Setup dialog.        if (err == noErr)        {            err = PMSessionPageSetupDialog( m_macPrintSession,                m_macPageFormat,                &accepted);            if ((err == noErr) && !accepted)            {                err = kPMCancel; // user clicked Cancel button            }        }        //  If the user did not cancel, flatten and save the PageFormat object        //  with our document.        if (err == noErr) {            result = wxID_OK ;        }    }    if ((err != noErr) && (err != kPMCancel))    {        message.Printf( wxT("Print Error %d"), err ) ;        wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ;        dialog.ShowModal();    }    return result ;}#elsewxNativePrintData* wxNativePrintData::Create(){    return new wxMacClassicPrintData() ;}wxMacClassicPrintData::wxMacClassicPrintData(){    m_macPrintSettings = NULL ;    ValidateOrCreate() ;}wxMacClassicPrintData::~wxMacClassicPrintData(){    wxASSERT( m_macPrintSettings );    DisposeHandle( (Handle) m_macPrintSettings ) ;}void wxMacClassicPrintData::ValidateOrCreate(){    if ( m_macPrintSettings == NULL )    {        m_macPrintSettings = (THPrint) NewHandleClear( sizeof( TPrint ) );

⌨️ 快捷键说明

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