// Gets an HDC for the specified printer configuration WXHDC WXDLLEXPORT wxGetPrinterDC(const wxPrintData& printDataConst) { #if defined(__WXUNIVERSAL__) && (!defined(__WXMSW__) || wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW) #if 0 wxPostScriptPrintNativeData *data = (wxPostScriptPrintNativeData *) printDataConst.GetNativeData(); // FIXME: how further ??? #else return 0; #endif #else // Postscript vs. native Windows wxWindowsPrintNativeData *data = (wxWindowsPrintNativeData *) printDataConst.GetNativeData(); data->TransferFrom( printDataConst ); wxChar* driverName = (wxChar*) NULL; wxString devNameStr = printDataConst.GetPrinterName(); wxChar* portName = (wxChar*) NULL; // Obsolete in WIN32 const wxChar* deviceName; if ( !devNameStr ) deviceName = (wxChar*) NULL; else deviceName = devNameStr.c_str(); LPDEVMODE lpDevMode = (LPDEVMODE) NULL; HGLOBAL hDevMode = (HGLOBAL)(DWORD) data->GetDevMode(); if ( hDevMode ) lpDevMode = (DEVMODE*) GlobalLock(hDevMode); if ( !devNameStr ) { // Retrieve the default device name wxString portName; if ( !wxGetDefaultDeviceName(devNameStr, portName) ) { return 0; // Could not get default device name } deviceName = devNameStr.c_str(); } #ifdef __WIN32__ HDC hDC = CreateDC(driverName, deviceName, portName, (DEVMODE *) lpDevMode); #else HDC hDC = CreateDC(driverName, deviceName, portName, (LPSTR) lpDevMode); #endif if (hDevMode && lpDevMode) GlobalUnlock(hDevMode); return (WXHDC) hDC; #endif }
// Gets an HDC for the specified printer configuration WXHDC WXDLLEXPORT wxGetPrinterDC(const wxPrintData& printDataConst) { #if wxUSE_PS_PRINTING // TODO wxUnusedVar(printDataConst); return 0; #else // native Windows printing wxWindowsPrintNativeData *data = (wxWindowsPrintNativeData *) printDataConst.GetNativeData(); data->TransferFrom( printDataConst ); wxString deviceName = printDataConst.GetPrinterName(); if ( deviceName.empty() ) { // Retrieve the default device name wxString portName; if ( !wxGetDefaultDeviceName(deviceName, portName) ) { return 0; // Could not get default device name } } GlobalPtrLock lockDevMode; const HGLOBAL devMode = data->GetDevMode(); if ( devMode ) lockDevMode.Init(devMode); HDC hDC = ::CreateDC ( NULL, // no driver name as we use device name deviceName.t_str(), NULL, // unused static_cast<DEVMODE *>(lockDevMode.Get()) ); if ( !hDC ) { wxLogLastError(wxT("CreateDC(printer)")); } return (WXHDC) hDC; #endif // PostScript/Windows printing }
// Gets an HDC for the specified printer configuration WXHDC WXDLLEXPORT wxGetPrinterDC(const wxPrintData& printDataConst) { #if wxUSE_PS_PRINTING // TODO wxUnusedVar(printDataConst); return 0; #else // native Windows printing wxWindowsPrintNativeData *data = (wxWindowsPrintNativeData *) printDataConst.GetNativeData(); data->TransferFrom( printDataConst ); wxString deviceName = printDataConst.GetPrinterName(); if ( deviceName.empty() ) { // Retrieve the default device name wxString portName; if ( !wxGetDefaultDeviceName(deviceName, portName) ) { return 0; // Could not get default device name } } HGLOBAL hDevMode = (HGLOBAL)(DWORD) data->GetDevMode(); DEVMODE *lpDevMode = hDevMode ? (DEVMODE *)::GlobalLock(hDevMode) : NULL; HDC hDC = ::CreateDC(NULL, deviceName, NULL, lpDevMode); if ( !hDC ) wxLogLastError(_T("CreateDC(printer)")); if ( lpDevMode ) ::GlobalUnlock(hDevMode); return (WXHDC) hDC; #endif // PostScript/Windows printing }