Drucken von Grafik



  • Hallo,

    ich habe eine dialogfeldbasierende Anwendung, welche ein Koordinatensystem mit diversen Kurven auf dem Bildschirm zeichnet sowie Werte dazu anzeigt. Das ganze möchte ich nun drucken. Muß ich da alles nochmal neu auf dem Printer Gerätekontext zeichnen oder läßt sich das ganze auch irgendwie anders drucken?!

    Viele Dank,
    Grüße!



  • okay, inzwischen bin ich weiter, aber folgendes prob hab ich noch: wie kann ich die auflösung des druckers und die papierausmaße bestimmen? wenn ich es mit lineto, moveto mit den bildschirmkoordinaten drucken lass wird es sehr klein und vor allem auf verschiedenen druckern unterschiedlich groß!
    im VC++ in 21 tagen hab ich leider keine lösung für eine dialog. anwendung gefunden!
    wär echt wichtig!
    danke im vorraus!



  • hier mal mein bisheriger code, leider wird die linie nicht gezeichnet sondern nur der text ausgegeben. was ist hier denn falsch??!

    void CZeichnen::OnDrucken() 
    {
    	CPrintDialog dlgPrint(FALSE, PD_ALLPAGES, this);
    
    	CRect rect;
    	CPrintInfo pInfo;
    	rect=pInfo.m_rectDraw;
    
    	if(dlgPrint.DoModal()==IDOK)
    	{
    		CDC dcPrint;
    		dcPrint.Attach(dlgPrint.GetPrinterDC());
    
    		CPoint ptMitte=pInfo.m_rectDraw.CenterPoint();
    		CPoint ptObenLinks=pInfo.m_rectDraw.TopLeft();
    
    		DOCINFO myPrintJob;
    		myPrintJob.cbSize=sizeof(myPrintJob);
    		myPrintJob.lpszDocName="test";
    		myPrintJob.lpszOutput=NULL;
    		myPrintJob.lpszDatatype=NULL;
    		myPrintJob.fwType=NULL;
    
    		if(dcPrint.StartDoc(&myPrintJob)>=0)
    		{
    		dcPrint.StartPage();
    
    		dcPrint.MoveTo(ptMitte);
    		dcPrint.LineTo(ptObenLinks);
    		dcPrint.TextOut(20,20, "Bearbeiter/In: "+m_bearbeiter);
    		dcPrint.TextOut(20,110, "Projektnummer: "+m_nummer);
    		dcPrint.TextOut(20,190, "Projektbezeichnung: "+m_projektbez);
    
    		}
    
    	         dcPrint.DeleteDC();
    	}
    }
    


  • wahrscheinlich sind die Koordinaten für die Linie falsch. Schon mal mit statischen Daten getestet?



  • die koordinaten können ja eigentlich nicht falsch sein, er soll mir ja selber die mitte der seite und oben links bestimmen!



  • Das sollte Dir helfen (als DC einfach Dein PrinterDC benutzen)

    http://download.pearsoned.de/leseecke/VCPLUS6_21Tg/data/kap08.htm



  • das hilft leider nicht weiter, den code den ich gepostet hab, hab ich ja auch zum großteil aus dem buch! ich hab aber halt leider keine SDI sondern ne dialog. Anwendung und irgendwie haut das da nicht hin!



  • die koordinaten können ja eigentlich nicht falsch sein, er soll mir ja selber die mitte der seite und oben links bestimmen!

    Wirklich sicher?
    Ich denke, die sind nicht richtig...
    CPrintInfo ist zwar deklariert aber wo initialisiert?

    Versuchs mal so...

    CPrintInfo pInfo; 
    
    pInfo.m_pPD = &dlgPrint;
    
    if(dlgPrint.DoModal()==IDOK) 
    { 
        CDC dcPrint; 
        dcPrint.Attach(dlgPrint.GetPrinterDC()); 
    
        CPoint ptMitte=pInfo.m_rectDraw.CenterPoint(); 
        CPoint ptObenLinks=pInfo.m_rectDraw.TopLeft(); 
        ...
    


  • vielen dank, aber das haut leider auch nicht hin, er kompiliert zwar aber bringt dann zur laufzeit nen fehler!



  • wenn Du magst, schick mir mal Deine eMail-Addi, dann schick ich Dir mal eine File.
    Dort ist auch ohne die SDI-unterstützung alles per Hand realisiert und der druckt auch Linien.
    (Kommt zwar im Quellcode nicht vor, habs aber eben nochmal probiert)



  • das wär echt super!!
    meine email ist:
    christian.gnaedig@gmx.de

    vielen dank im vorraus!!


Anmelden zum Antworten