+#if defined(__WXMSW__) // && defined(__WIN32__)
+
+#if defined(__WXDEBUG__) && defined(__WIN32__)
+static wxString wxGetPrintDlgError()
+{
+ DWORD err = CommDlgExtendedError();
+ wxString msg = wxT("Unknown");
+ switch (err)
+ {
+ case CDERR_FINDRESFAILURE: msg = wxT("CDERR_FINDRESFAILURE"); break;
+ case CDERR_INITIALIZATION: msg = wxT("CDERR_INITIALIZATION"); break;
+ case CDERR_LOADRESFAILURE: msg = wxT("CDERR_LOADRESFAILURE"); break;
+ case CDERR_LOADSTRFAILURE: msg = wxT("CDERR_LOADSTRFAILURE"); break;
+ case CDERR_LOCKRESFAILURE: msg = wxT("CDERR_LOCKRESFAILURE"); break;
+ case CDERR_MEMALLOCFAILURE: msg = wxT("CDERR_MEMALLOCFAILURE"); break;
+ case CDERR_MEMLOCKFAILURE: msg = wxT("CDERR_MEMLOCKFAILURE"); break;
+ case CDERR_NOHINSTANCE: msg = wxT("CDERR_NOHINSTANCE"); break;
+ case CDERR_NOHOOK: msg = wxT("CDERR_NOHOOK"); break;
+ case CDERR_NOTEMPLATE: msg = wxT("CDERR_NOTEMPLATE"); break;
+ case CDERR_STRUCTSIZE: msg = wxT("CDERR_STRUCTSIZE"); break;
+ case PDERR_RETDEFFAILURE: msg = wxT("PDERR_RETDEFFAILURE"); break;
+ case PDERR_PRINTERNOTFOUND: msg = wxT("PDERR_PRINTERNOTFOUND"); break;
+ case PDERR_PARSEFAILURE: msg = wxT("PDERR_PARSEFAILURE"); break;
+ case PDERR_NODEVICES: msg = wxT("PDERR_NODEVICES"); break;
+ case PDERR_NODEFAULTPRN: msg = wxT("PDERR_NODEFAULTPRN"); break;
+ case PDERR_LOADDRVFAILURE: msg = wxT("PDERR_LOADDRVFAILURE"); break;
+ case PDERR_INITFAILURE: msg = wxT("PDERR_INITFAILURE"); break;
+ case PDERR_GETDEVMODEFAIL: msg = wxT("PDERR_GETDEVMODEFAIL"); break;
+ case PDERR_DNDMMISMATCH: msg = wxT("PDERR_DNDMMISMATCH"); break;
+ case PDERR_DEFAULTDIFFERENT: msg = wxT("PDERR_DEFAULTDIFFERENT"); break;
+ case PDERR_CREATEICFAILURE: msg = wxT("PDERR_CREATEICFAILURE"); break;
+ default: break;
+ }
+ return msg;
+}
+#endif
+
+static HGLOBAL wxCreateDevNames(const wxString& driverName, const wxString& printerName, const wxString& portName)
+{
+ HGLOBAL hDev = NULL;
+ // if (!driverName.IsEmpty() && !printerName.IsEmpty() && !portName.IsEmpty())
+ if (driverName.IsEmpty() && printerName.IsEmpty() && portName.IsEmpty())
+ {
+ }
+ else
+ {
+ hDev = GlobalAlloc(GPTR, 4*sizeof(WORD)+
+ ( driverName.Length() + 1 +
+ printerName.Length() + 1 +
+ portName.Length()+1 ) * sizeof(wxChar) );
+ LPDEVNAMES lpDev = (LPDEVNAMES)GlobalLock(hDev);
+ lpDev->wDriverOffset = sizeof(WORD)*4;
+ wxStrcpy((wxChar*)((char*)lpDev + lpDev->wDriverOffset ), driverName);
+
+ lpDev->wDeviceOffset = (WORD)( lpDev->wDriverOffset +
+ sizeof(wxChar) * ( driverName.Length() + 1 ) );
+ wxStrcpy((wxChar*)((char*)lpDev + lpDev->wDeviceOffset ), printerName);
+
+ lpDev->wOutputOffset = (WORD)( lpDev->wDeviceOffset +
+ sizeof(wxChar) * ( printerName.Length() + 1 ) );
+ wxStrcpy((wxChar*)((char*) lpDev + lpDev->wOutputOffset ), portName);
+
+ lpDev->wDefault = 0;
+
+ GlobalUnlock(hDev);
+ }
+
+ return hDev;
+}