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:
Vadim Zeitlin
1999-04-02 22:30:56 +00:00
parent 391364946e
commit 103aec296a
4 changed files with 222 additions and 166 deletions

View File

@@ -19,27 +19,28 @@
#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)
public:
wxPrintDialog(void);
wxPrintDialog();
wxPrintDialog(wxWindow *parent, wxPrintDialogData* data = NULL);
~wxPrintDialog(void);
wxPrintDialog(wxWindow *parent, wxPrintData* data);
virtual ~wxPrintDialog();
bool Create(wxWindow *parent, wxPrintDialogData* data = NULL);
virtual int ShowModal(void);
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;
@@ -52,18 +53,19 @@ class WXDLLEXPORT wxPageSetupDialog: public wxDialog
{
DECLARE_DYNAMIC_CLASS(wxPageSetupDialog)
private:
wxPageSetupData m_pageSetupData;
wxWindow* m_dialogParent;
public:
wxPageSetupDialog(void);
public:
wxPageSetupDialog();
wxPageSetupDialog(wxWindow *parent, wxPageSetupData *data = NULL);
~wxPageSetupDialog(void);
virtual ~wxPageSetupDialog();
bool Create(wxWindow *parent, wxPageSetupData *data = NULL);
virtual int ShowModal(void);
virtual int ShowModal();
inline wxPageSetupData& GetPageSetupData(void) { return m_pageSetupData; }
wxPageSetupData& GetPageSetupData() { return m_pageSetupData; }
private:
wxPageSetupData m_pageSetupData;
wxWindow* m_dialogParent;
};
#endif

View File

@@ -13,47 +13,54 @@
#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
*/
// ---------------------------------------------------------------------------
// Represents the printer: manages printing a wxPrintout object
// ---------------------------------------------------------------------------
class WXDLLEXPORT wxWindowsPrinter: public wxPrinterBase
class WXDLLEXPORT wxWindowsPrinter : public wxPrinterBase
{
DECLARE_DYNAMIC_CLASS(wxWindowsPrinter)
public:
public:
wxWindowsPrinter(wxPrintDialogData *data = NULL);
~wxWindowsPrinter(void);
virtual ~wxWindowsPrinter();
virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = TRUE);
virtual bool Print(wxWindow *parent,
wxPrintout *printout,
bool prompt = TRUE);
virtual wxDC* PrintDialog(wxWindow *parent);
virtual bool Setup(wxWindow *parent);
private:
private:
WXFARPROC m_lpAbortProc;
};
/*
* wxPrintPreview
* Programmer creates an object of this class to preview a wxPrintout.
*/
// ---------------------------------------------------------------------------
// wxPrintPreview: programmer creates an object of this class to preview a
// wxPrintout.
// ---------------------------------------------------------------------------
class WXDLLEXPORT wxWindowsPrintPreview: public wxPrintPreviewBase
class WXDLLEXPORT wxWindowsPrintPreview : public wxPrintPreviewBase
{
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 void DetermineScaling();
};
#endif
// _WX_PRINTWIN_H_
// _WX_PRINTWIN_H_

View File

@@ -9,18 +9,23 @@
// 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;
@@ -77,13 +101,13 @@ bool wxPrintDialog::Create(wxWindow *p, wxPrintDialogData* data)
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();
@@ -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);
}
@@ -147,11 +163,11 @@ bool wxPageSetupDialog::Create(wxWindow *p, wxPageSetupData *data)
return TRUE;
}
wxPageSetupDialog::~wxPageSetupDialog(void)
wxPageSetupDialog::~wxPageSetupDialog()
{
}
int wxPageSetupDialog::ShowModal(void)
int wxPageSetupDialog::ShowModal()
{
#ifdef __WIN95__
m_pageSetupData.ConvertToNative();

View File

@@ -9,24 +9,32 @@
// 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);
}
@@ -173,7 +193,7 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
#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
// 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)
@@ -186,12 +206,13 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
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();
@@ -203,7 +224,7 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
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)
@@ -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);