more backwards compatibility for printing
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2030 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
391364946e
commit
103aec296a
@ -6,7 +6,7 @@
|
||||
// Created: 01/02/97
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Julian Smart
|
||||
// Licence: wxWindows licence
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_PRINTDLG_H_
|
||||
@ -19,51 +19,53 @@
|
||||
#include "wx/dialog.h"
|
||||
#include "wx/cmndata.h"
|
||||
|
||||
/*
|
||||
* wxPrinterDialog
|
||||
* The common dialog for printing.
|
||||
*/
|
||||
|
||||
class WXDLLEXPORT wxDC;
|
||||
class WXDLLEXPORT wxPrintDialog: public wxDialog
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxPrinterDialog: the common dialog for printing.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxPrintDialog : public wxDialog
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxPrintDialog)
|
||||
DECLARE_DYNAMIC_CLASS(wxPrintDialog)
|
||||
|
||||
public:
|
||||
wxPrintDialog(void);
|
||||
wxPrintDialog(wxWindow *parent, wxPrintDialogData* data = NULL);
|
||||
~wxPrintDialog(void);
|
||||
wxPrintDialog();
|
||||
wxPrintDialog(wxWindow *parent, wxPrintDialogData* data = NULL);
|
||||
wxPrintDialog(wxWindow *parent, wxPrintData* data);
|
||||
virtual ~wxPrintDialog();
|
||||
|
||||
bool Create(wxWindow *parent, wxPrintDialogData* data = NULL);
|
||||
virtual int ShowModal(void);
|
||||
bool Create(wxWindow *parent, wxPrintDialogData* data = NULL);
|
||||
virtual int ShowModal();
|
||||
|
||||
inline wxPrintDialogData& GetPrintDialogData(void) { return m_printDialogData; }
|
||||
inline wxPrintData& GetPrintData(void) { return m_printDialogData.GetPrintData(); }
|
||||
virtual wxDC *GetPrintDC(void);
|
||||
wxPrintDialogData& GetPrintDialogData() { return m_printDialogData; }
|
||||
wxPrintData& GetPrintData() { return m_printDialogData.GetPrintData(); }
|
||||
virtual wxDC *GetPrintDC();
|
||||
|
||||
private:
|
||||
wxPrintDialogData m_printDialogData;
|
||||
wxDC* m_printerDC;
|
||||
bool m_destroyDC;
|
||||
wxWindow* m_dialogParent;
|
||||
wxPrintDialogData m_printDialogData;
|
||||
wxDC* m_printerDC;
|
||||
bool m_destroyDC;
|
||||
wxWindow* m_dialogParent;
|
||||
};
|
||||
|
||||
class WXDLLEXPORT wxPageSetupDialog: public wxDialog
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxPageSetupDialog)
|
||||
DECLARE_DYNAMIC_CLASS(wxPageSetupDialog)
|
||||
|
||||
private:
|
||||
wxPageSetupData m_pageSetupData;
|
||||
wxWindow* m_dialogParent;
|
||||
public:
|
||||
wxPageSetupDialog(void);
|
||||
wxPageSetupDialog(wxWindow *parent, wxPageSetupData *data = NULL);
|
||||
~wxPageSetupDialog(void);
|
||||
public:
|
||||
wxPageSetupDialog();
|
||||
wxPageSetupDialog(wxWindow *parent, wxPageSetupData *data = NULL);
|
||||
virtual ~wxPageSetupDialog();
|
||||
|
||||
bool Create(wxWindow *parent, wxPageSetupData *data = NULL);
|
||||
virtual int ShowModal(void);
|
||||
bool Create(wxWindow *parent, wxPageSetupData *data = NULL);
|
||||
virtual int ShowModal();
|
||||
|
||||
inline wxPageSetupData& GetPageSetupData(void) { return m_pageSetupData; }
|
||||
wxPageSetupData& GetPageSetupData() { return m_pageSetupData; }
|
||||
|
||||
private:
|
||||
wxPageSetupData m_pageSetupData;
|
||||
wxWindow* m_dialogParent;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -6,54 +6,61 @@
|
||||
// Created: 01/02/97
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Julian Smart
|
||||
// Licence: wxWindows licence
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_PRINTWIN_H_
|
||||
#define _WX_PRINTWIN_H_
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma interface "printwin.h"
|
||||
#pragma interface "printwin.h"
|
||||
#endif
|
||||
|
||||
#include "wx/prntbase.h"
|
||||
|
||||
/*
|
||||
* Represents the printer: manages printing a wxPrintout object
|
||||
*/
|
||||
|
||||
class WXDLLEXPORT wxWindowsPrinter: public wxPrinterBase
|
||||
// ---------------------------------------------------------------------------
|
||||
// Represents the printer: manages printing a wxPrintout object
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxWindowsPrinter : public wxPrinterBase
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxWindowsPrinter)
|
||||
DECLARE_DYNAMIC_CLASS(wxWindowsPrinter)
|
||||
|
||||
public:
|
||||
wxWindowsPrinter(wxPrintDialogData *data = NULL);
|
||||
~wxWindowsPrinter(void);
|
||||
public:
|
||||
wxWindowsPrinter(wxPrintDialogData *data = NULL);
|
||||
virtual ~wxWindowsPrinter();
|
||||
|
||||
virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = TRUE);
|
||||
virtual wxDC* PrintDialog(wxWindow *parent);
|
||||
virtual bool Setup(wxWindow *parent);
|
||||
virtual bool Print(wxWindow *parent,
|
||||
wxPrintout *printout,
|
||||
bool prompt = TRUE);
|
||||
virtual wxDC* PrintDialog(wxWindow *parent);
|
||||
virtual bool Setup(wxWindow *parent);
|
||||
|
||||
private:
|
||||
WXFARPROC m_lpAbortProc;
|
||||
private:
|
||||
WXFARPROC m_lpAbortProc;
|
||||
};
|
||||
|
||||
/*
|
||||
* wxPrintPreview
|
||||
* Programmer creates an object of this class to preview a wxPrintout.
|
||||
*/
|
||||
|
||||
class WXDLLEXPORT wxWindowsPrintPreview: public wxPrintPreviewBase
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxPrintPreview: programmer creates an object of this class to preview a
|
||||
// wxPrintout.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxWindowsPrintPreview : public wxPrintPreviewBase
|
||||
{
|
||||
DECLARE_CLASS(wxWindowsPrintPreview)
|
||||
DECLARE_CLASS(wxWindowsPrintPreview)
|
||||
|
||||
public:
|
||||
wxWindowsPrintPreview(wxPrintout *printout, wxPrintout *printoutForPrinting = NULL, wxPrintDialogData *data = NULL);
|
||||
~wxWindowsPrintPreview(void);
|
||||
public:
|
||||
wxWindowsPrintPreview(wxPrintout *printout,
|
||||
wxPrintout *printoutForPrinting = NULL,
|
||||
wxPrintDialogData *data = NULL);
|
||||
wxWindowsPrintPreview(wxPrintout *printout,
|
||||
wxPrintout *printoutForPrinting,
|
||||
wxPrintData *data);
|
||||
virtual ~wxWindowsPrintPreview();
|
||||
|
||||
virtual bool Print(bool interactive);
|
||||
virtual void DetermineScaling(void);
|
||||
virtual bool Print(bool interactive);
|
||||
virtual void DetermineScaling();
|
||||
};
|
||||
|
||||
#endif
|
||||
// _WX_PRINTWIN_H_
|
||||
// _WX_PRINTWIN_H_
|
||||
|
@ -6,21 +6,26 @@
|
||||
// Created: 04/01/98
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Julian Smart and Markus Holzem
|
||||
// Licence: wxWindows license
|
||||
// Licence: wxWindows license
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// ===========================================================================
|
||||
// declarations
|
||||
// ===========================================================================
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// headers
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma implementation "printdlg.h"
|
||||
#pragma implementation "printdlg.h"
|
||||
#endif
|
||||
|
||||
// For compilers that support precompilation, includes "wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
#pragma hdrstop
|
||||
#endif
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#pragma hdrstop
|
||||
#endif
|
||||
|
||||
#include "wx/printdlg.h"
|
||||
@ -28,7 +33,7 @@
|
||||
|
||||
// Have to emulate page setup dialog for Win16
|
||||
#if !defined(__WIN95__)
|
||||
#include "wx/generic/prntdlgg.h"
|
||||
#include "wx/generic/prntdlgg.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
@ -36,7 +41,7 @@
|
||||
#include <commdlg.h>
|
||||
|
||||
#ifndef __WIN32__
|
||||
#include <print.h>
|
||||
#include <print.h>
|
||||
#endif
|
||||
|
||||
// Clash with Windows header files
|
||||
@ -44,25 +49,44 @@
|
||||
#undef StartDoc
|
||||
#endif
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxWin macros
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#if !USE_SHARED_LIBRARY
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxPrintDialog, wxDialog)
|
||||
IMPLEMENT_CLASS(wxPageSetupDialog, wxDialog)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxPrintDialog, wxDialog)
|
||||
IMPLEMENT_CLASS(wxPageSetupDialog, wxDialog)
|
||||
#endif
|
||||
|
||||
wxPrintDialog::wxPrintDialog(void):
|
||||
wxDialog()
|
||||
// ===========================================================================
|
||||
// implementation
|
||||
// ===========================================================================
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxPrintDialog
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
wxPrintDialog::wxPrintDialog()
|
||||
{
|
||||
m_dialogParent = NULL;
|
||||
m_printerDC = NULL;
|
||||
m_destroyDC = TRUE;
|
||||
}
|
||||
|
||||
wxPrintDialog::wxPrintDialog(wxWindow *p, wxPrintDialogData* data):
|
||||
wxDialog()
|
||||
wxPrintDialog::wxPrintDialog(wxWindow *p, wxPrintDialogData* data)
|
||||
{
|
||||
Create(p, data);
|
||||
}
|
||||
|
||||
wxPrintDialog::wxPrintDialog(wxWindow *p, wxPrintData* data)
|
||||
{
|
||||
wxPrintDialogData data2;
|
||||
if ( data )
|
||||
data2 = *data;
|
||||
|
||||
Create(p, &data2);
|
||||
}
|
||||
|
||||
bool wxPrintDialog::Create(wxWindow *p, wxPrintDialogData* data)
|
||||
{
|
||||
m_dialogParent = p;
|
||||
@ -71,22 +95,22 @@ bool wxPrintDialog::Create(wxWindow *p, wxPrintDialogData* data)
|
||||
|
||||
if ( data )
|
||||
m_printDialogData = *data;
|
||||
|
||||
|
||||
m_printDialogData.SetOwnerWindow(p);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
wxPrintDialog::~wxPrintDialog(void)
|
||||
wxPrintDialog::~wxPrintDialog()
|
||||
{
|
||||
if (m_destroyDC && m_printerDC)
|
||||
delete m_printerDC;
|
||||
}
|
||||
|
||||
int wxPrintDialog::ShowModal(void)
|
||||
int wxPrintDialog::ShowModal()
|
||||
{
|
||||
m_printDialogData.ConvertToNative();
|
||||
|
||||
|
||||
bool ret = (PrintDlg( (PRINTDLG *)m_printDialogData.GetNativeData() ) != 0);
|
||||
if ( ret != FALSE && ((PRINTDLG *)m_printDialogData.GetNativeData())->hDC)
|
||||
{
|
||||
@ -97,17 +121,11 @@ int wxPrintDialog::ShowModal(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
char buf[256];
|
||||
DWORD exError = CommDlgExtendedError();
|
||||
sprintf(buf, "ret = %d, ex error = %d", (int) ret, (int) exError);
|
||||
wxMessageBox(buf);
|
||||
*/
|
||||
return wxID_CANCEL;
|
||||
}
|
||||
}
|
||||
|
||||
wxDC *wxPrintDialog::GetPrintDC(void)
|
||||
wxDC *wxPrintDialog::GetPrintDC()
|
||||
{
|
||||
if (m_printerDC)
|
||||
{
|
||||
@ -118,18 +136,16 @@ wxDC *wxPrintDialog::GetPrintDC(void)
|
||||
return (wxDC*) NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* wxPageSetupDialog
|
||||
*/
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxPageSetupDialog
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
wxPageSetupDialog::wxPageSetupDialog(void):
|
||||
wxDialog()
|
||||
wxPageSetupDialog::wxPageSetupDialog()
|
||||
{
|
||||
m_dialogParent = NULL;
|
||||
}
|
||||
|
||||
wxPageSetupDialog::wxPageSetupDialog(wxWindow *p, wxPageSetupData *data):
|
||||
wxDialog()
|
||||
wxPageSetupDialog::wxPageSetupDialog(wxWindow *p, wxPageSetupData *data)
|
||||
{
|
||||
Create(p, data);
|
||||
}
|
||||
@ -137,21 +153,21 @@ wxDialog()
|
||||
bool wxPageSetupDialog::Create(wxWindow *p, wxPageSetupData *data)
|
||||
{
|
||||
m_dialogParent = p;
|
||||
|
||||
|
||||
if (data)
|
||||
m_pageSetupData = (*data);
|
||||
|
||||
|
||||
#if defined(__WIN95__)
|
||||
m_pageSetupData.SetOwnerWindow(p);
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
wxPageSetupDialog::~wxPageSetupDialog(void)
|
||||
wxPageSetupDialog::~wxPageSetupDialog()
|
||||
{
|
||||
}
|
||||
|
||||
int wxPageSetupDialog::ShowModal(void)
|
||||
int wxPageSetupDialog::ShowModal()
|
||||
{
|
||||
#ifdef __WIN95__
|
||||
m_pageSetupData.ConvertToNative();
|
||||
|
@ -6,27 +6,35 @@
|
||||
// Created: 04/01/98
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Julian Smart and Markus Holzem
|
||||
// Licence: wxWindows license
|
||||
// Licence: wxWindows license
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// ===========================================================================
|
||||
// declarations
|
||||
// ===========================================================================
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// headers
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma implementation "printwin.h"
|
||||
#pragma implementation "printwin.h"
|
||||
#endif
|
||||
|
||||
// For compilers that support precompilation, includes "wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
#pragma hdrstop
|
||||
#pragma hdrstop
|
||||
#endif
|
||||
|
||||
#include "wx/defs.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/utils.h"
|
||||
#include "wx/dc.h"
|
||||
#include "wx/app.h"
|
||||
#include "wx/msgdlg.h"
|
||||
#include "wx/utils.h"
|
||||
#include "wx/dc.h"
|
||||
#include "wx/app.h"
|
||||
#include "wx/msgdlg.h"
|
||||
#endif
|
||||
|
||||
#include "wx/msw/printwin.h"
|
||||
@ -40,31 +48,43 @@
|
||||
|
||||
// Clash with Windows header files
|
||||
#ifdef StartDoc
|
||||
#undef StartDoc
|
||||
#undef StartDoc
|
||||
#endif
|
||||
|
||||
#ifndef __WIN32__
|
||||
#include <print.h>
|
||||
#include <print.h>
|
||||
#endif
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// private functions
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
LONG APIENTRY _EXPORT wxAbortProc(HDC hPr, int Code);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxWin macros
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#if !USE_SHARED_LIBRARY
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxWindowsPrinter, wxPrinterBase)
|
||||
IMPLEMENT_CLASS(wxWindowsPrintPreview, wxPrintPreviewBase)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxWindowsPrinter, wxPrinterBase)
|
||||
IMPLEMENT_CLASS(wxWindowsPrintPreview, wxPrintPreviewBase)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Printer
|
||||
*/
|
||||
// ===========================================================================
|
||||
// implementation
|
||||
// ===========================================================================
|
||||
|
||||
wxWindowsPrinter::wxWindowsPrinter(wxPrintDialogData *data):
|
||||
wxPrinterBase(data)
|
||||
// ---------------------------------------------------------------------------
|
||||
// Printer
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
wxWindowsPrinter::wxWindowsPrinter(wxPrintDialogData *data)
|
||||
: wxPrinterBase(data)
|
||||
{
|
||||
m_lpAbortProc = (WXFARPROC) MakeProcInstance((FARPROC) wxAbortProc, wxGetInstance());
|
||||
}
|
||||
|
||||
wxWindowsPrinter::~wxWindowsPrinter(void)
|
||||
wxWindowsPrinter::~wxWindowsPrinter()
|
||||
{
|
||||
FreeProcInstance((FARPROC) m_lpAbortProc);
|
||||
}
|
||||
@ -73,28 +93,28 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
|
||||
{
|
||||
sm_abortIt = FALSE;
|
||||
sm_abortWindow = NULL;
|
||||
|
||||
|
||||
if (!printout)
|
||||
return FALSE;
|
||||
|
||||
|
||||
printout->SetIsPreview(FALSE);
|
||||
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)
|
||||
return FALSE;
|
||||
|
||||
|
||||
m_printDialogData.SetMinPage(minPage);
|
||||
m_printDialogData.SetMaxPage(maxPage);
|
||||
if (fromPage != 0)
|
||||
m_printDialogData.SetFromPage(fromPage);
|
||||
if (toPage != 0)
|
||||
m_printDialogData.SetToPage(toPage);
|
||||
|
||||
|
||||
if (minPage != 0)
|
||||
{
|
||||
m_printDialogData.EnablePageNumbers(TRUE);
|
||||
@ -110,7 +130,7 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
|
||||
else
|
||||
m_printDialogData.EnablePageNumbers(FALSE);
|
||||
|
||||
// Create a suitable device context
|
||||
// Create a suitable device context
|
||||
wxDC *dc = NULL;
|
||||
if (prompt)
|
||||
{
|
||||
@ -123,24 +143,24 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
|
||||
// dc = new wxPrinterDC("", "", "", FALSE, m_printData.GetOrientation());
|
||||
dc = new wxPrinterDC(m_printDialogData.GetPrintData());
|
||||
}
|
||||
|
||||
|
||||
// May have pressed cancel.
|
||||
if (!dc || !dc->Ok())
|
||||
{
|
||||
if (dc) delete dc;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
int logPPIScreenX = 0;
|
||||
int logPPIScreenY = 0;
|
||||
int logPPIPrinterX = 0;
|
||||
int logPPIPrinterY = 0;
|
||||
|
||||
|
||||
HDC hdc = ::GetDC(NULL);
|
||||
logPPIScreenX = ::GetDeviceCaps(hdc, LOGPIXELSX);
|
||||
logPPIScreenY = ::GetDeviceCaps(hdc, LOGPIXELSY);
|
||||
::ReleaseDC(NULL, hdc);
|
||||
|
||||
|
||||
logPPIPrinterX = ::GetDeviceCaps((HDC) dc->GetHDC(), LOGPIXELSX);
|
||||
logPPIPrinterY = ::GetDeviceCaps((HDC) dc->GetHDC(), LOGPIXELSY);
|
||||
if (logPPIPrinterX == 0 || logPPIPrinterY == 0)
|
||||
@ -148,33 +168,33 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
|
||||
delete dc;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
printout->SetPPIScreen(logPPIScreenX, logPPIScreenY);
|
||||
printout->SetPPIPrinter(logPPIPrinterX, logPPIPrinterY);
|
||||
|
||||
// Set printout parameters
|
||||
|
||||
// Set printout parameters
|
||||
printout->SetDC(dc);
|
||||
|
||||
|
||||
int w, h;
|
||||
dc->GetSize(&w, &h);
|
||||
printout->SetPageSizePixels((int)w, (int)h);
|
||||
|
||||
dc->GetSizeMM(&w, &h);
|
||||
printout->SetPageSizeMM((int)w, (int)h);
|
||||
|
||||
|
||||
// Create an abort window
|
||||
wxBeginBusyCursor();
|
||||
|
||||
|
||||
wxWindow *win = CreateAbortWindow(parent, printout);
|
||||
wxYield();
|
||||
|
||||
|
||||
#if defined(__BORLANDC__) || defined(__GNUWIN32__) || defined(__SALFORDC__) || !defined(__WIN32__)
|
||||
::SetAbortProc((HDC) dc->GetHDC(), (FARPROC) m_lpAbortProc);
|
||||
#else
|
||||
::SetAbortProc((HDC) dc->GetHDC(), (int (_stdcall *)
|
||||
// cast it to right type only if required
|
||||
// @@@ it's really cdecl and we're casting it to stdcall - either there is
|
||||
// something I don't understand or it will crash at first usage
|
||||
// FIXME it's really cdecl and we're casting it to stdcall - either there is
|
||||
// something I don't understand or it will crash at first usage
|
||||
#ifdef STRICT
|
||||
(HDC, int)
|
||||
#else
|
||||
@ -182,33 +202,34 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
|
||||
#endif
|
||||
)m_lpAbortProc);
|
||||
#endif
|
||||
|
||||
|
||||
if (!win)
|
||||
{
|
||||
wxEndBusyCursor();
|
||||
wxMessageBox("Sorry, could not create an abort dialog.", "Print Error", wxOK, parent);
|
||||
wxLogDebug("Could not create an abort dialog.");
|
||||
|
||||
delete dc;
|
||||
}
|
||||
sm_abortWindow = win;
|
||||
sm_abortWindow->Show(TRUE);
|
||||
wxYield();
|
||||
|
||||
wxSafeYield();
|
||||
|
||||
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("Could not start printing.", "Print Error", wxOK, parent);
|
||||
wxLogError(_("Could not start printing."));
|
||||
break;
|
||||
}
|
||||
if (sm_abortIt)
|
||||
break;
|
||||
|
||||
|
||||
int pn;
|
||||
for (pn = m_printDialogData.GetFromPage(); keepGoing && (pn <= m_printDialogData.GetToPage()) && printout->HasPage(pn);
|
||||
pn++)
|
||||
@ -227,20 +248,20 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
|
||||
}
|
||||
printout->OnEndDocument();
|
||||
}
|
||||
|
||||
|
||||
printout->OnEndPrinting();
|
||||
|
||||
|
||||
if (sm_abortWindow)
|
||||
{
|
||||
sm_abortWindow->Show(FALSE);
|
||||
delete sm_abortWindow;
|
||||
sm_abortWindow = NULL;
|
||||
}
|
||||
|
||||
|
||||
wxEndBusyCursor();
|
||||
|
||||
|
||||
delete dc;
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -279,13 +300,23 @@ bool wxWindowsPrinter::Setup(wxWindow *parent)
|
||||
* Print preview
|
||||
*/
|
||||
|
||||
wxWindowsPrintPreview::wxWindowsPrintPreview(wxPrintout *printout, wxPrintout *printoutForPrinting, wxPrintDialogData *data):
|
||||
wxPrintPreviewBase(printout, printoutForPrinting, data)
|
||||
wxWindowsPrintPreview::wxWindowsPrintPreview(wxPrintout *printout,
|
||||
wxPrintout *printoutForPrinting,
|
||||
wxPrintDialogData *data)
|
||||
: wxPrintPreviewBase(printout, printoutForPrinting, data)
|
||||
{
|
||||
DetermineScaling();
|
||||
}
|
||||
|
||||
wxWindowsPrintPreview::~wxWindowsPrintPreview(void)
|
||||
wxWindowsPrintPreview::wxWindowsPrintPreview(wxPrintout *printout,
|
||||
wxPrintout *printoutForPrinting,
|
||||
wxPrintData *data)
|
||||
: wxPrintPreviewBase(printout, printoutForPrinting, data)
|
||||
{
|
||||
DetermineScaling();
|
||||
}
|
||||
|
||||
wxWindowsPrintPreview::~wxWindowsPrintPreview()
|
||||
{
|
||||
}
|
||||
|
||||
@ -297,7 +328,7 @@ bool wxWindowsPrintPreview::Print(bool interactive)
|
||||
return printer.Print(m_previewFrame, m_printPrintout, interactive);
|
||||
}
|
||||
|
||||
void wxWindowsPrintPreview::DetermineScaling(void)
|
||||
void wxWindowsPrintPreview::DetermineScaling()
|
||||
{
|
||||
HDC dc = ::GetDC(NULL);
|
||||
int screenWidth = ::GetDeviceCaps(dc, HORZSIZE);
|
||||
@ -307,39 +338,39 @@ void wxWindowsPrintPreview::DetermineScaling(void)
|
||||
int logPPIScreenX = ::GetDeviceCaps(dc, LOGPIXELSX);
|
||||
int logPPIScreenY = ::GetDeviceCaps(dc, LOGPIXELSY);
|
||||
m_previewPrintout->SetPPIScreen(logPPIScreenX, logPPIScreenY);
|
||||
|
||||
|
||||
::ReleaseDC(NULL, dc);
|
||||
|
||||
|
||||
// Get a device context for the currently selected printer
|
||||
wxPrinterDC printerDC(m_printDialogData.GetPrintData());
|
||||
|
||||
|
||||
int printerWidth = 150;
|
||||
int printerHeight = 250;
|
||||
int printerXRes = 1500;
|
||||
int printerYRes = 2500;
|
||||
|
||||
|
||||
if (printerDC.GetHDC())
|
||||
{
|
||||
printerWidth = ::GetDeviceCaps((HDC) printerDC.GetHDC(), HORZSIZE);
|
||||
printerHeight = ::GetDeviceCaps((HDC) printerDC.GetHDC(), VERTSIZE);
|
||||
printerXRes = ::GetDeviceCaps((HDC) printerDC.GetHDC(), HORZRES);
|
||||
printerYRes = ::GetDeviceCaps((HDC) printerDC.GetHDC(), VERTRES);
|
||||
|
||||
|
||||
int logPPIPrinterX = ::GetDeviceCaps((HDC) printerDC.GetHDC(), LOGPIXELSX);
|
||||
int logPPIPrinterY = ::GetDeviceCaps((HDC) printerDC.GetHDC(), LOGPIXELSY);
|
||||
|
||||
|
||||
m_previewPrintout->SetPPIPrinter(logPPIPrinterX, logPPIPrinterY);
|
||||
m_previewPrintout->SetPageSizeMM(printerWidth, printerHeight);
|
||||
|
||||
|
||||
if (logPPIPrinterX == 0 || logPPIPrinterY == 0 || printerWidth == 0 || printerHeight == 0)
|
||||
m_isOk = FALSE;
|
||||
}
|
||||
else
|
||||
m_isOk = FALSE;
|
||||
|
||||
|
||||
m_pageWidth = printerXRes;
|
||||
m_pageHeight = printerYRes;
|
||||
|
||||
|
||||
// At 100%, the page should look about page-size on the screen.
|
||||
m_previewScale = (float)((float)screenWidth/(float)printerWidth);
|
||||
m_previewScale = m_previewScale * (float)((float)screenXRes/(float)printerYRes);
|
||||
@ -348,28 +379,28 @@ void wxWindowsPrintPreview::DetermineScaling(void)
|
||||
/****************************************************************************
|
||||
|
||||
FUNCTION: wxAbortProc()
|
||||
|
||||
|
||||
PURPOSE: Processes messages for the Abort Dialog box
|
||||
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
LONG APIENTRY _EXPORT wxAbortProc(HDC WXUNUSED(hPr), int WXUNUSED(Code))
|
||||
{
|
||||
MSG msg;
|
||||
|
||||
|
||||
if (!wxPrinterBase::sm_abortWindow) /* If the abort dialog isn't up yet */
|
||||
return(TRUE);
|
||||
|
||||
|
||||
/* Process messages intended for the abort dialog box */
|
||||
|
||||
|
||||
while (!wxPrinterBase::sm_abortIt && PeekMessage(&msg, 0, 0, 0, TRUE))
|
||||
if (!IsDialogMessage((HWND) wxPrinterBase::sm_abortWindow->GetHWND(), &msg)) {
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
|
||||
/* bAbort is TRUE (return is FALSE) if the user has aborted */
|
||||
|
||||
|
||||
return (!wxPrinterBase::sm_abortIt);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user