String über mehrere Seiten Drucken

Panda Cabrio

Grünschnabel
Moin!

Ich will einen String ausdrucken der über mehrere Seiten gehen kann!

Wie kann ich erkennen, wann eine Seite vorbei ist?
bzw. wieviel Text auf eine Seite passt!

Bisher lese ich einfach die Zeilenwechsel (0xA) in dem String aus und
bestimme darüber wieviel Zeilen schon geschrieben wurden!

Aber wie kann ich erkennen wieviel Zeichen in eine Zeile passen,
in Times sind ja z.B. nicht alle Zeichen gleich lang.
 
Ich gehe mal davon aus, dass du dir irgendwo schon einen DeviceContext für den Drucker besorgt hast.
Hier kannst du schon mal die Seitengröße bzw. den bedruckbaren Bereich rauskriegen:
Code:
// dc ist der DeviceContext für den Drucker

dc.SetMapMode(MM_LOENGLISH);

// Beginn des bedruckbaren Bereiches (Startkoordinaten auf der Seite)
int nOffsetY = dc.GetDeviceCaps(PHYSICALOFFSETY);  
int nOffsetX = dc.GetDeviceCaps(PHYSICALOFFSETX);

// Größe des bedruckbaren Bereiches        
int nHeight  = dc.GetDeviceCaps(PHYSICALHEIGHT) - (2 * nOffsetY);
int nWidth   = dc.GetDeviceCaps(PHYSICALWIDTH) - (2 * nOffsetX);

Die Breite eines Textes bekommst du mit GetTextExtent():
Code:
CSize size = dc.GetTextExtent(_T("Irgendwas zum drucken"));

Du musst also vor dem Drucken mit GetTextExtent() ausprobieren, wieviel Text in eine Zeile passt (size.x < nWidth).
Dann kannst du den Textteil drucken und das ganze Prozedere ab der aktuellen Textposition für die nächste Zeile durchführen.
Wenn du immer die Texthöhe (size.y) aufaddierst, kannst du diesen Wert immer mit der Seitenhöhe (nHeight) vergleichen und bekommst so mit, wann die Seite voll ist.

Gruß
MCoder
 
Zurück