У меня есть старое приложение, которое мне нужно для печати в ландшафтном режиме. В документации я нашел говорит, чтобы получить структуру DEVMODE, изменить пару полей, и положил его обратно в То, что я получил, это:.Win32 печать - невозможно установить ландшафтный режим
HANDLE printer_handle;
LPHANDLE printer_handle_pointer(&printer_handle);
OpenPrinter(printer_name.get(), printer_handle_pointer, NULL);
size_t devmode_size = DocumentProperties(hWnd, printer_handle_pointer, printer_name.get(), NULL, NULL, 0);
DEVMODE * devmode = reinterpret_cast<DEVMODE *>(new char[devmode_size]);
DocumentProperties(NULL, printer_handle_pointer, printer_name.get(), devmode, NULL, DM_OUT_BUFFER);
devmode->dmSize = sizeof(DEVMODE);
devmode->dmFields |= DM_ORIENTATION;
devmode->dmOrientation = DMORIENT_LANDSCAPE;
DocumentProperties(NULL, printer_handle_pointer, printer_name.get(), devmode, devmode, DM_IN_BUFFER | DM_OUT_BUFFER);
hdcPrint = CreateDC(NULL, printer_name.get(), NULL, devmode);
Моя текущая проблема заключается в том, что первые DocumentProperties (один который возвращает размер структуры DEVMODE) возвращает -1 (фактически беззнаковый эквивалент), что означает условие ошибки. Это происходит как в режиме отладки, так и в режиме Release (один отчет, который я видел в Интернете, имел эту проблему в Debug, но не Release). printer_name.get()
действителен, но я не знаю, как проверить hWnd
или printer_handle_pointer
на правильность в отладчике.
Итак, мне бы хотелось, чтобы кто-нибудь мог сказать мне, что я делаю неправильно, или как лучше диагностировать его, или как определить правильность дескрипторов и указать на достоверную информацию, я был бы признателен ,
Я использую VS 2008SP1 для Vista Business SP1, если это имеет значение. Первоначальное приложение было написано с более ранней версией VS на некоторой версии XP.
Спасибо за указатель, но техника GetPrinter() работала не лучше для меня. –
Большое спасибо. Это прибило его. –