X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bd84061db32633592490da273570b8d78215c6c3..713129f9d34e3027d2be46b134d2f4c490ad145f:/src/msw/printdlg.cpp?ds=sidebyside diff --git a/src/msw/printdlg.cpp b/src/msw/printdlg.cpp index eb2d5dd126..37bdfd3aba 100644 --- a/src/msw/printdlg.cpp +++ b/src/msw/printdlg.cpp @@ -46,7 +46,8 @@ // wxWindowsPrintNativeData //---------------------------------------------------------------------------- -#ifdef __WXDEBUG__ +#if wxDEBUG_LEVEL + static wxString wxGetPrintDlgError() { DWORD err = CommDlgExtendedError(); @@ -79,7 +80,9 @@ static wxString wxGetPrintDlgError() } return msg; } -#endif // __WXDEBUG__ + +#endif // wxDEBUG_LEVEL + static HGLOBAL wxCreateDevNames(const wxString& driverName, @@ -129,10 +132,10 @@ wxWindowsPrintNativeData::wxWindowsPrintNativeData() wxWindowsPrintNativeData::~wxWindowsPrintNativeData() { if ( m_devMode ) - ::GlobalFree(wx_static_cast(HGLOBAL, m_devMode)); + ::GlobalFree(static_cast(m_devMode)); if ( m_devNames ) - ::GlobalFree(wx_static_cast(HGLOBAL, m_devNames)); + ::GlobalFree(static_cast(m_devNames)); } bool wxWindowsPrintNativeData::IsOk() const @@ -147,7 +150,7 @@ bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data ) GlobalPtrLock lockDevMode(m_devMode); - LPDEVMODE devMode = wx_static_cast(LPDEVMODE, lockDevMode.Get()); + LPDEVMODE devMode = static_cast(lockDevMode.Get()); //// Orientation if (devMode->dmFields & DM_ORIENTATION) @@ -312,7 +315,7 @@ bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data ) if ( m_devNames ) { GlobalPtrLock lockDevNames(m_devNames); - LPDEVNAMES lpDevNames = wx_static_cast(LPDEVNAMES, lockDevNames.Get()); + LPDEVNAMES lpDevNames = static_cast(lockDevNames.Get()); // TODO: Unicode-ification @@ -335,7 +338,7 @@ bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data ) bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) { - HGLOBAL hDevMode = wx_static_cast(HGLOBAL, m_devMode); + HGLOBAL hDevMode = static_cast(m_devMode); if ( !m_devMode ) { // Use PRINTDLG as a way of creating a DEVMODE object @@ -366,11 +369,9 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) pd.hDevMode = NULL; pd.hDevNames = NULL; -#ifdef __WXDEBUG__ - wxString str(wxT("Printing error: ")); - str += wxGetPrintDlgError(); - wxLogDebug(str); -#endif // __WXDEBUG__ +#if wxDEBUG_LEVEL + wxLogDebug(wxT("Printing error: ") + wxGetPrintDlgError()); +#endif // wxDEBUG_LEVEL } else { @@ -393,7 +394,7 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) if ( hDevMode ) { GlobalPtrLock lockDevMode(hDevMode); - DEVMODE * const devMode = wx_static_cast(DEVMODE *, lockDevMode.Get()); + DEVMODE * const devMode = static_cast(lockDevMode.Get()); //// Orientation devMode->dmOrientation = (short)data.GetOrientation(); @@ -412,10 +413,9 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) { // NB: the cast is needed in the ANSI build, strangely enough // dmDeviceName is BYTE[] and not char[] there - wxStrncpy(wx_reinterpret_cast(wxChar *, devMode->dmDeviceName), + wxStrlcpy(reinterpret_cast(devMode->dmDeviceName), name.wx_str(), - WXSIZEOF(devMode->dmDeviceName) - 1); - devMode->dmDeviceName[WXSIZEOF(devMode->dmDeviceName) - 1] = wxT('\0'); + WXSIZEOF(devMode->dmDeviceName)); } //// Colour @@ -457,6 +457,15 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) devMode->dmPaperLength = (short)(paperSize.y * 10); devMode->dmFields |= DM_PAPERWIDTH; devMode->dmFields |= DM_PAPERLENGTH; + + // A printer driver may or may not also want DM_PAPERSIZE to + // be specified. Also, if the printer driver doesn't implement the DMPAPER_USER + // size, then this won't work, and even if you found the correct id by + // enumerating the driver's paper sizes, it probably won't change the actual size, + // it'll just select that custom paper type with its own current setting. + // For a discussion on this, see http://www.codeguru.com/forum/showthread.php?threadid=458617 + // Although m_customWindowsPaperId is intended to work around this, it's + // unclear how it can help you set the custom paper size programmatically. } //else: neither paper type nor size specified, don't fill DEVMODE // at all so that the system defaults are used @@ -544,7 +553,7 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) if ( m_devNames ) { - ::GlobalFree(wx_static_cast(HGLOBAL, m_devNames)); + ::GlobalFree(static_cast(m_devNames)); } // TODO: I hope it's OK to pass some empty strings to DEVNAMES. @@ -675,13 +684,13 @@ bool wxWindowsPrintDialog::ConvertToNative( wxPrintDialogData &data ) if (pd->hDevNames) GlobalFree(pd->hDevNames); - pd->hDevMode = wx_static_cast(HGLOBAL, native_data->GetDevMode()); + pd->hDevMode = static_cast(native_data->GetDevMode()); native_data->SetDevMode(NULL); // Shouldn't assert; we should be able to test Ok-ness at a higher level //wxASSERT_MSG( (pd->hDevMode), wxT("hDevMode must be non-NULL in ConvertToNative!")); - pd->hDevNames = wx_static_cast(HGLOBAL, native_data->GetDevNames()); + pd->hDevNames = static_cast(native_data->GetDevNames()); native_data->SetDevNames(NULL); @@ -697,7 +706,7 @@ bool wxWindowsPrintDialog::ConvertToNative( wxPrintDialogData &data ) pd->hwndOwner = NULL; pd->hInstance = NULL; - pd->lCustData = NULL; + pd->lCustData = 0; pd->lpfnPrintHook = NULL; pd->lpfnSetupHook = NULL; pd->lpPrintTemplateName = NULL; @@ -741,7 +750,7 @@ bool wxWindowsPrintDialog::ConvertFromNative( wxPrintDialogData &data ) { if (native_data->GetDevMode()) { - ::GlobalFree(wx_static_cast(HGLOBAL, native_data->GetDevMode())); + ::GlobalFree(static_cast(native_data->GetDevMode())); } native_data->SetDevMode(pd->hDevMode); pd->hDevMode = NULL; @@ -752,7 +761,7 @@ bool wxWindowsPrintDialog::ConvertFromNative( wxPrintDialogData &data ) { if (native_data->GetDevNames()) { - ::GlobalFree(wx_static_cast(HGLOBAL, native_data->GetDevNames())); + ::GlobalFree(static_cast(native_data->GetDevNames())); } native_data->SetDevNames(pd->hDevNames); pd->hDevNames = NULL;