From 6c797d8fd16ef5b2fedc1e554455e3144eeaa383 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Tue, 2 Aug 2011 19:49:02 +0000 Subject: [PATCH] Initialize the native printer info for ConvertFromNative if it hasn't been done already. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68494 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/printdlg.h | 2 ++ src/msw/printdlg.cpp | 36 +++++++++++++++++++++++++----------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/include/wx/msw/printdlg.h b/include/wx/msw/printdlg.h index 754e212f9f..bcca2b91e9 100644 --- a/include/wx/msw/printdlg.h +++ b/include/wx/msw/printdlg.h @@ -20,6 +20,7 @@ #include "wx/printdlg.h" class WXDLLIMPEXP_FWD_CORE wxDC; +class WinPrinter; //---------------------------------------------------------------------------- // wxWindowsPrintNativeData @@ -37,6 +38,7 @@ public: virtual bool Ok() const { return IsOk(); } virtual bool IsOk() const; + void InitializeDevMode(const wxString &printerName = wxEmptyString, WinPrinter* printer = NULL); void* GetDevMode() const { return m_devMode; } void SetDevMode(void* data) { m_devMode = data; } void* GetDevNames() const { return m_devNames; } diff --git a/src/msw/printdlg.cpp b/src/msw/printdlg.cpp index 205009999b..fac6fdf743 100644 --- a/src/msw/printdlg.cpp +++ b/src/msw/printdlg.cpp @@ -192,6 +192,9 @@ bool wxWindowsPrintNativeData::IsOk() const bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data ) { + if ( !m_devMode ) + InitializeDevMode(); + if ( !m_devMode ) return false; @@ -383,20 +386,21 @@ bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data ) return true; } -bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) +void wxWindowsPrintNativeData::InitializeDevMode(const wxString& printerName, WinPrinter* printer) { - HGLOBAL hDevMode = static_cast(m_devMode); - WinPrinter printer; - LPTSTR szPrinterName = (LPTSTR)data.GetPrinterName().wx_str(); + if (m_devMode) + return; + + LPTSTR szPrinterName = (LPTSTR)printerName.wx_str(); // From MSDN: How To Modify Printer Settings with the DocumentProperties() Function // The purpose of this is to fill the DEVMODE with privdata from printer driver. // If we have a printer name and OpenPrinter sucessfully returns // this replaces the PrintDlg function which creates the DEVMODE filled only with data from default printer. - if ( !m_devMode && !data.GetPrinterName().IsEmpty() ) + if ( !m_devMode && !printerName.IsEmpty() ) { // Open printer - if ( printer.Open( data.GetPrinterName() ) == TRUE ) + if ( printer && printer->Open( printerName ) == TRUE ) { DWORD dwNeeded, dwRet; @@ -424,12 +428,11 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) { // If failure, cleanup GlobalFree( tempDevMode ); - printer.Close(); + printer->Close(); } else { - hDevMode = tempDevMode; - m_devMode = hDevMode; + m_devMode = tempDevMode; tempDevMode = NULL; } } @@ -471,8 +474,7 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) } else { - hDevMode = pd.hDevMode; - m_devMode = hDevMode; + m_devMode = pd.hDevMode; pd.hDevMode = NULL; // We'll create a new DEVNAMEs structure below. @@ -487,6 +489,18 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) } } +} + +bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) +{ + WinPrinter printer; + LPTSTR szPrinterName = (LPTSTR)data.GetPrinterName().wx_str(); + + if (!m_devMode) + InitializeDevMode(data.GetPrinterName(), &printer); + + HGLOBAL hDevMode = static_cast(m_devMode); + if ( hDevMode ) { GlobalPtrLock lockDevMode(hDevMode); -- 2.45.2