J'ai une ancienne application dont j'ai besoin pour imprimer en mode paysage. La documentation que j'ai trouvé dit avoir une structure DEVMODE, changer quelques champs, et le mettre dans ce que j'ai est:.Impression Win32 - impossible de définir le mode paysage
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);
Mon problème actuel est que les premiers PropriétésDocument (celui qui renvoie la taille de la structure DEVMODE) renvoie -1 (en fait l'équivalent non signé), ce qui signifie une condition d'erreur. Cela se produit en mode Debug et Release (un rapport que j'ai vu sur le web a rencontré ce problème dans Debug mais pas Release). Le printer_name.get()
est valide, mais je ne sais pas comment vérifier le hWnd
ou printer_handle_pointer
pour l'exactitude dans le débogueur. Donc, j'aimerais que quelqu'un me dise ce que je fais de mal, ou comment le diagnostiquer mieux, ou comment savoir si les poignées sont valides et indiquent des informations valides, j'apprécierais . J'utilise VS 2008SP1 sur Vista Business SP1, si cela fait une différence. L'application originale a été écrite avec une version antérieure de VS sur une version de XP.
Merci pour le pointeur, mais la technique GetPrinter() n'a pas fonctionné mieux pour moi. –
Merci beaucoup. Ça l'a cloué. –