Drucken in einem Dialog



  • Hi!

    Ich möchte aus einer Dialoganwendung drucken. Ich finde oder verstehe davon überhaupt nichts. Es sollen verschiedene Texte an bestimmten Positionen gedruckt werden. Ich bekomm es aber nicht in meine Anwendung integriert. Wer kann mir helfen so etwas zu verwirklichen? Bin schon fasst verzweifelt 😞

    Hier die Quellcodes wo ich verzweifelt versuche zu intergrieren: http://www.codeproject.com/printing/printlib.asp http://www.codeproject.com/printing/printlongtext.asp



  • CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this);
    
    	if (dlgPrint.DoModal()==IDOK)
    	{
    		CDC dcPrint;
    		dcPrint.Attach(dlgPrint.GetPrinterDC());
    		dcPrint.SetMapMode(MM_LOMETRIC);
    
    		DOCINFO myPrintJob;
    		myPrintJob.cbSize = sizeof(myPrintJob);
    		myPrintJob.lpszDocName = "Druckauftrag Titel";
    		myPrintJob.lpszOutput = NULL;
    		myPrintJob.lpszDatatype = NULL;
    		myPrintJob.fwType = NULL;
    
    		if (dcPrint.StartDoc(&myPrintJob)>=0)
    		{
    			dcPrint.StartPage();
    			dcPrint.TextOut(200,-200,"Hallo");  //Achtung: Negativwerte (kein Ahnung warum)
    			dcPrint.EndPage();
    			dcPrint.EndDoc();
    		}
    	}
    


  • Danke! 🙂 Endlich aus jeder beliebigen Anwendung drucken...

    Wie kann man aber da einen Zeilenumbruch/Seitenumbruch realisieren.



  • Du holst dir die Höhe von dem Text und verschiebst den Offset nach links unter dem Text der vorigen Zeile. Oder du nimmst einfach DrawText.



  • Seitenumbruch: StartPage() / EndPage()

    Zeilenumbruch musste gucken wie lang die Zeile ist welche du ausgeben willst und wenn sie zu lang ist halt aufteilen. Um herauszufinden wie breit ein bestimmter Texabschnitt ist hat CDC irgendeine Methode, die weis ich jetzt aber nicht auswending.



  • Zeilenlänge berechnen mit

    CSize GetOutputTextExtent( const CString& str ) const;
    

    aber dann weis ich erst wie lang der Text sein würde. Trennen aber wie?



  • RECT rec;
    rec.left = 200;
    rec.right = 400;
    rec.bottom = -400;
    rec.top = -200;
    dcPrint.DrawText("Hallo das ist ein Test Text.",&rec,DT_WORDBREAK);
    

    Kannte ich noch gar nicht, funktioniert aber ganz gut, nur wie bekomme ich raus wieviel text er nun wirklich gezeichnet hat (Wenn das rechteck von der höhe her nicht mehr ausreicht verschluckt er ja die hälfte)?



  • Geil endlich Zeilenumbruch! Aber du hast Recht, wann ist die Seite zu Ende?



  • Wann die Seite zu ende ist muss man sich berechnen.
    Zuerst die Druckdaten des Druckers (Treiber) auslesen welche Auflösung u.s.w. eingestellt ist.
    Da bekommt man dann die Max. Druckbaren Punkte.
    Dann schaut man einfach ob aktuelle Ausgabe größer als Max.
    Wenn ja dann neue Seite
    Ohne Berechnung geht es nicht


Anmelden zum Antworten