Seitenumbruch in OnPrint
-
Hallo,
ich möchte in meinem Programm jedesmal genau 2 Seiten drucken, und in der OnPrint dafür einen "Seitenumbruch" einfügen, damit der Drucker weiß, was auf die zweite Seite muß. Wie kann ich das machen?
Ich weiß, dass wenn man in der OnPreparePrinting das MinPage auf 2 setzt, dass er da auf Anhieb immer 2 Seiten druckt, und die OnPrint zweimal aufruft. Ich möchte aber auf dem zweiten Blatt nicht das selbe wie auf dem ersten haben, also möchte ich wissen, wie ich der OnPrint sagen kann, das der Quellcode ab einer bestimmten Stelle in der OnPrint nun auf die zweite Seite gedruckt werden soll.
Kann mir jemand helfen?
Tschau
Antje
-
Da steht was über Seitenumbrüche, etc: http://www.diabolo666.com/tutorials/c++/Vcplus6/kap_c.htm
-
Hi,
könnt Ihr mir auf die Sprünge helfen ?
Ich habe das gleiche Problem, nur dass beim mir die Seitenzahl variabel ist.
Ich habe einen langen Text, der nicht auf eine Seite passt,
ich kann ausrechnen, wie viele Seiten ich brauche, das ist kein Problem,
die OnPrint Funktion wird dann x mal aufgerufen, ich weiß welche Seite
gerade gedruckt wird.
Irgendwie habe ich aber keine Idee wie ich das machen soll, dass der Text
So geteilt wird, dass eben der „richtige“ Teil auf die richtige Seite kommt.Der obere Link funktioniert leider nicht

Danke
Gruss
Alex
-
Hi,
ich musste mal sowas für ein Projekt machen, also File einlesen und seitenweise drucken. Ist zwar keine Musterlösung, aber im Endeffekt hat es funktioniert, vielleicht hilft es euch weiter.
void CSwp1Dlg::OnPrintau() { /////////////////////////////////////////////////// CPrintDialog dlgPrint(FALSE,PD_ALLPAGES,this); CString printAusgabe; //AU zeilenweise auslesen //sofort jede Zeile drucken if (dlgPrint.DoModal()==IDOK) { CDC dcPrint; dcPrint.Attach(dlgPrint.GetPrinterDC()); DOCINFO myPrintJob; myPrintJob.cbSize = sizeof(myPrintJob); myPrintJob.lpszDocName = "Drehen32: Arbeitsunterweisung drucken"; myPrintJob.lpszOutput = NULL; myPrintJob.lpszDatatype = NULL; myPrintJob.fwType = NULL; if (dcPrint.StartDoc(&myPrintJob)>=0) { dcPrint.StartPage(); //Schleife zum AU-file auslesen string filename=AU_File_Name; FILE *aufile; char c; string s,a; CString printAusgabe; int linecnt=0; string au_file=AU_Pfad; au_file.append(AU_File_Name); aufile = fopen(au_file.c_str(),"r"); while(!feof(aufile)) { c=fgetc(aufile); if(c=='\n') { //s.append(" \n\r"); printAusgabe=s.c_str(); printAusgabe.OemToAnsi(); dcPrint.TextOut(0,linecnt,printAusgabe); linecnt+=100; s=""; } else { a=c; s.append(a); } if(linecnt>(66*100)) { // Seite auswerfen dcPrint.EndPage(); linecnt=0; dcPrint.StartPage(); } } printAusgabe=s.c_str(); printAusgabe.OemToAnsi(); //dcPrint.DrawText(printAusgabe,rect,DT_WORDBREAK); //////////////////////////////////////// // Seite auswerfen dcPrint.EndPage(); // Dokument schließen dcPrint.EndDoc(); } // Druckergerätekontext löschen dcPrint.DeleteDC(); } ///////////////////////////////////////////// }Für den Seitenumbruch entscheidend ist eigentlich nur dcPrint.EndPage(); und dcPrint.StartPage(); .
Gruss,
Sebastian
-
Danke,
scheint aber CView und OnPrint nicht zu funktionieren,
EndPage liefert -1 ( general error ) zurück
Gruss
Alex
-
Ich steh seit einiger Zeit vor dem gleichen Problem http://www.c-plusplus.net/forum/viewtopic.php?t=84445. Ich vermute das dies mit StartDoc, StartPage, EndPage und EndDoc zu tun hat aber wie/wo und vor allem warum hab ich keine Ahnung.
Um aus einer dialogfeldbasierten Anwendung zu drucken findet man ein haufen Tuts aber zu SDI nix.
-
Geht eigentlich PrintPreview in einer dialogbasierten Anwendung ?
den das SDI an sich brauch ich eigentlich gar nicht...Gruss
Alex
-
So, Sitenumbruch an sich habe ich inzwischen hingekriegt,
aber es geht nur wenn auf allen Seiten gleich viel Platz ist,
da ich unterschiedlich grosse Header habe, geht es bei mir schief
Würde mich also immernoch interessieren, ob bei dem "Dialogbasierten
Drucken" Preview möglich ist.Wo finde ich den oben erwähnten Haufen Tuts zum Drucken aus den
diealogbasierten Anwendungen ?Danke
Gruss
Alex
-
könntest du mir auch bitte sagen wie? ich habe einen konstanten header und wäre dann fertig mit meinem projekt.
-
Es ist eine recht einfache Lösung ( auf die ich leider nicht selbst gekommen bin
)Hier ist sie : http://www.codeproject.com/printing/printlongtext.asp
Nur der Zeilenumbruch funktioniert nicht richtig, die Funktion
müsste neu geschrieben werden...Gruss
Alex
-
ok dankööööööö habs jetzt damit gelöst
