X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/103aec296a2c017f915b4b2b2584191fdb716a75..fbdcff4a78e03963d750546b8a74752247b38d40:/src/msw/printwin.cpp diff --git a/src/msw/printwin.cpp b/src/msw/printwin.cpp index cfd271d228..f46993f88a 100644 --- a/src/msw/printwin.cpp +++ b/src/msw/printwin.cpp @@ -31,25 +31,26 @@ #include "wx/defs.h" #ifndef WX_PRECOMP + #include "wx/window.h" + #include "wx/msw/private.h" #include "wx/utils.h" #include "wx/dc.h" #include "wx/app.h" #include "wx/msgdlg.h" + #include "wx/intl.h" #endif #include "wx/msw/printwin.h" #include "wx/dcprint.h" #include "wx/printdlg.h" +#include "wx/log.h" #include "wx/msw/private.h" #include -#include -#include -// Clash with Windows header files -#ifdef StartDoc - #undef StartDoc -#endif +#include "wx/msw/private.h" + +#include #ifndef __WIN32__ #include @@ -65,10 +66,8 @@ LONG APIENTRY _EXPORT wxAbortProc(HDC hPr, int Code); // wxWin macros // --------------------------------------------------------------------------- -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxWindowsPrinter, wxPrinterBase) IMPLEMENT_CLASS(wxWindowsPrintPreview, wxPrintPreviewBase) -#endif // =========================================================================== // implementation @@ -86,7 +85,11 @@ wxWindowsPrinter::wxWindowsPrinter(wxPrintDialogData *data) wxWindowsPrinter::~wxWindowsPrinter() { + // avoids mingw warning about statement with no effect (FreeProcInstance + // doesn't do anything under Win32) +#ifndef __GNUWIN32__ FreeProcInstance((FARPROC) m_lpAbortProc); +#endif } bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt) @@ -98,7 +101,11 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt return FALSE; printout->SetIsPreview(FALSE); - printout->OnPreparePrinting(); + + // 4/9/99, JACS: this is a silly place to allow preparation, considering + // the DC and no parameters have been set in the printout object. + // Moved further down. + // printout->OnPreparePrinting(); // Get some parameters from the printout, if defined int fromPage, toPage; @@ -185,11 +192,17 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt // Create an abort window wxBeginBusyCursor(); + printout->OnPreparePrinting(); + wxWindow *win = CreateAbortWindow(parent, printout); wxYield(); #if defined(__BORLANDC__) || defined(__GNUWIN32__) || defined(__SALFORDC__) || !defined(__WIN32__) +#ifdef STRICT + ::SetAbortProc((HDC) dc->GetHDC(), (ABORTPROC) m_lpAbortProc); +#else ::SetAbortProc((HDC) dc->GetHDC(), (FARPROC) m_lpAbortProc); +#endif #else ::SetAbortProc((HDC) dc->GetHDC(), (int (_stdcall *) // cast it to right type only if required @@ -206,7 +219,7 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt if (!win) { wxEndBusyCursor(); - wxLogDebug("Could not create an abort dialog."); + wxLogDebug(wxT("Could not create an abort dialog.")); delete dc; } @@ -216,10 +229,10 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt printout->OnBeginPrinting(); - bool keepGoing = TRUE; - int copyCount; - for (copyCount = 1; copyCount <= m_printDialogData.GetNoCopies(); copyCount ++) + for ( copyCount = 1; + copyCount <= m_printDialogData.GetNoCopies(); + copyCount++ ) { if (!printout->OnBeginDocument(m_printDialogData.GetFromPage(), m_printDialogData.GetToPage())) { @@ -231,21 +244,23 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt break; int pn; - for (pn = m_printDialogData.GetFromPage(); keepGoing && (pn <= m_printDialogData.GetToPage()) && printout->HasPage(pn); - pn++) + for ( pn = m_printDialogData.GetFromPage(); + pn <= m_printDialogData.GetToPage() && printout->HasPage(pn); + pn++ ) { - if (sm_abortIt) + if ( sm_abortIt ) { - keepGoing = FALSE; break; } - else - { - dc->StartPage(); - printout->OnPrintPage(pn); - dc->EndPage(); - } + + dc->StartPage(); + bool cont = printout->OnPrintPage(pn); + dc->EndPage(); + + if ( !cont ) + break; } + printout->OnEndDocument(); }