Drucken (Querformat)



  • Ich habe die Druckvorschau Print PVL. In dieser Vorschau kann man mit

    pDevMode->dmOrientation=DMORIENT_LANDSCAPE;
    

    Die Ausrichtung des Blattes auf Querformat ändern.

    Ich habe nun aber das Problem, dass wenn ich aus meine CDC-Objekt (Drucker) das Selbe ausdrucken möchte, es natürlich nicht querformat ist! Wie kann ich die Seite auf Querformat in meinem CDC-Objekt ändern?

    Ich habe mir überlegt es wie folgt zu machen:

    DEVMODEA devmodea;
    devmodea->dmOrientation=DMORIENT_LANDSCAPE;
    

    Aber nun muss ich wohl die Variable devmodea nicht dem CDC-Objekt übergeben...
    kann mir da jemand helfen?

    Vielen Dank!


  • Mod

    Nein! Diese Daten werden aus dem DEVMODE bei Erzeugung des CD's übernommen oder wenn ResetDC durchgeführt wird.

    Ich vermute einfach das Du die DEVMODE Daten zu spät setzt.



  • Dies funktioniert bei mir jedoch irgendwie nicht!

    Hier der Codeausschnitt:

    DEVMODEA devmodea;
    devmodea.dmOrientation=DMORIENT_LANDSCAPE;
    CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this); 
    
    if (dlgPrint.DoModal()==IDOK) 
    { 		
    
    	CDC hPrinter; 
    
    	hPrinter.Attach(dlgPrint.GetPrinterDC()); 
    	DOCINFO myPrintJob; 
    	myPrintJob.cbSize = sizeof(myPrintJob); 
    	myPrintJob.lpszDocName = "QPM-StagePlan"; 
    	myPrintJob.lpszOutput = NULL; 
    	myPrintJob.lpszDatatype = NULL; 
    	myPrintJob.fwType = NULL; 
    	if (hPrinter.StartDoc(&myPrintJob)>=0) 
    	{ 
    		hPrinter.StartPage();
    		Drucken(&hPrinter,false);
    		hPrinter.EndPage();
    		hPrinter.EndDoc();
    	}
    }
    

    Die Seite ist immernoch im Hochformat!
    Wieso??? 😉


  • Mod

    DEVMODEA devmodea; 
    devmodea.dmOrientation=DMORIENT_LANDSCAPE; 
    CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this);
    

    Ist doch auch totaler Quatsch. Die DEVMODE Struktur,die Du dahin gesetzt hast, hast doch keine Verbindung mit dem CPrintDialog!

    Ruf GetDefaults auf, besorg Dir dann mit GetDevMode den Zeiger auf die aktuelle DEMOMODE Struktur. Verändere die Orientierung und rufe dann DoMOdal auf!



  • Ich habe dies nun 2h versucht! Es wird jedoch nun den Druckerdialog nicht mehr angezeigt! Wieso nicht?
    Hier mein Code:

    CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this); 
    dlgPrint.GetDefaults();
    dlgPrint.GetDevMode()->dmOrientation=DMORIENT_LANDSCAPE;
    
    if (dlgPrint.DoModal()==IDOK) 
    { 	
         ...
    }
    

    Sobald ich GetDefaults(); auskommentiere, funktioniert DoModal() wieder!
    Wieso?
    Wo liegt das Problem???



  • Sieht richtig aus. Ist es aber offenbar nicht, da es bei mir auch
    abschmiert.

    Havy a try @google. Ich hab leider grad keine Zeit da weiter nach zu
    suchen.



  • Hi, mach es so:

    CPrintDialog dlg(FALSE);
    	dlg.GetDefaults();
    //hier kommt der wichtige Teil an der Geschichte!!!
    	dlg.m_pd.Flags &= ~PD_RETURNDEFAULT;
    
    	DEVMODE* dm=(DEVMODE*) GlobalLock(dlg.m_pd.hDevMode);
    	dm->dmFields|=DM_ORIENTATION;
    	dm->dmOrientation=DMORIENT_LANDSCAPE ;
    
    	if(dlg.DoModal() == IDOK)
    		{
    		}
    

Anmelden zum Antworten