|
|
|
|
|
Hier stehen Informationen rund um das Drucken. Hier steht wie man mit Hilfe eines Druck-Dialog drucken kann oder auch mit dem Standard-Drucker
- Drucken im Dialog
- Drucken mit und ohne Druck-Dialog - CPrintDialog
- Listenelement-Daten drucken - Mehrseitiger Druck
Ab und zu möchte man Werte aus einem Dialog ausdrucken, sei es ein String aus einem Textfeld oder Eingabefeld oder sonstige Dinge. Hier zeige ich euch wie das funktioniert
Beispiel
Im folgenden Beispiel zeige ich euch wie man etwas Text und Linien aus einem Dialog drucken kann.
- Erstelle eine Dialogfeldbasierte Anwendung mit dem Namen: Drucken_im_Dialog und entferne alle vorhandenen Elemente
- Füge ein Textfeld ein, ändere den Titel in Drucken im Dialog und die ID in: IDC_DRUCKEN
- Füge einen Button ein und ändere den Titel in Drucken
- Klicke doppelt auf den Button um eine Nachrichtenbehandlungsroutine (Funktion) für die BN_CLICKED-Nachricht
einzufügen und übernehme den vorgeschlagenen Funktionsnamen
- Füge folgenden Code in die eben erstellte Funktion ein:
void CDrucken_im_DialogDlg::OnButton1()
{
CPrintDialog dlgPrint(FALSE, PD_ALLPAGES, this);
// GetDefaults liefert den Standarddrucker
// dlgPrint.GetDefaults();
if(dlgPrint.DoModal()==IDOK)
{
// Verbinden des Drucker-DC mit einem CDC-Objekt
CDC dcPrint;
dcPrint.Attach(dlgPrint.GetPrinterDC());
// DOCINFO-Struktur erzeugen (wird für Druck benötigt)
DOCINFO Print;
Print.cbSize = sizeof(Print);
Print.lpszDocName = "Drucken im Dialog";
Print.lpszOutput = NULL;
Print.lpszDatatype = NULL;
Print.fwType = NULL;
//Maße des druckbaren Bereiches des Papiers ermitteln (in 0,1mm)
dcPrint.SetMapMode(MM_LOMETRIC);
int nLaenge = dcPrint.GetDeviceCaps(VERTSIZE);
int nBreite = dcPrint.GetDeviceCaps(HORZSIZE);
int nRechts = nBreite * 10 - 50;
int nUnten = -nLaenge * 10 + 50;
// Ausdruck des Dokuments starten
if(dcPrint.StartDoc(&Print)>=0)
{
// Eine Seite beginnen
dcPrint.StartPage();
// Überschrift ausgeben, dazu das Textfeld auslesen
CString str_Textfeld;
GetDlgItemText(IDC_DRUCKEN, str_Textfeld);
dcPrint.TextOut(900, -100, str_Textfeld);
// Text ausgeben
dcPrint.TextOut(50, -500, "Das ist ein Probetext, aus dem Beispiel: Drucken im Dialog. Es ist eigentlich ganz einfach :)");
dcPrint.TextOut(50, -550, "Hier lassen sich auch Linien drucken, z.B so:");
// Linien zeichnen
dcPrint.MoveTo(50, -620);
dcPrint.LineTo(nRechts, -620);
dcPrint.MoveTo(50, -690);
dcPrint.LineTo(nRechts, -690);
dcPrint.MoveTo(50, -760);
dcPrint.LineTo(nRechts, -760);
// Seite auswerfen
dcPrint.EndPage();
// Dokument schließen
dcPrint.EndDoc();
// Druckergerätekontext löschen
dcPrint.DeleteDC();
MessageBox("Daten wurden erfolgreich gedruckt", "Info", MB_ICONEXCLAMATION);
}
}
else
MessageBox("Fehler! Dokument konnte nicht gedruckt werden", "Fehler!", MB_ICONEXCLAMATION);
}
 |
Beschreibung:
Um das nochmal zu verdeutlichen wie leicht es ist aus einem Dialog heraus zu drucken, zeige ich euch hier mal nur absolut nötigen Code dazu:
void CDrucken_im_DialogDlg::OnButton1()
{
CPrintDialog dlgPrint(FALSE, PD_ALLPAGES, this);
// GetDefaults liefert den Standarddrucker
// dlgPrint.GetDefaults();
if(dlgPrint.DoModal()==IDOK)
{
// Verbinden des Drucker-DC mit einem CDC-Objekt
CDC dcPrint;
dcPrint.Attach(dlgPrint.GetPrinterDC());
// DOCINFO-Struktur erzeugen (wird für Druck benötigt)
DOCINFO Print;
Print.cbSize = sizeof(Print);
Print.lpszDocName = "Drucken im Dialog";
Print.lpszOutput = NULL;
Print.lpszDatatype = NULL;
Print.fwType = NULL;
//Maße des druckbaren Bereiches des Papiers ermitteln (in 0,1mm)
dcPrint.SetMapMode(MM_LOMETRIC);
// Ausdruck des Dokuments starten
if(dcPrint.StartDoc(&Print)>=0)
{
// Eine Seite beginnen
dcPrint.StartPage();
// Überschrift ausgeben, dazu das Textfeld auslesen
dcPrint.TextOut(900, -100, "Drucken im Dialog");
// Seite auswerfen
dcPrint.EndPage();
// Dokument schließen
dcPrint.EndDoc();
// Druckergerätekontext löschen
dcPrint.DeleteDC();
}
}
else
MessageBox("Fehler! Dokument konnte nicht gedruckt werden", "Fehler!", MB_ICONEXCLAMATION);
}
Was ihr nun darin ausdruckt, was ihr malt bleibt euch überlassen. Das einzigste erwähnenswerte sind diese Zeilen:
// GetDefaults liefert den Standarddrucker
// dlgPrint.GetDefaults();
Will man das der Druck sofort nach Klick auf den Button Drucken startet, dann muss man nur die Kommentarzeichen vor diesen zwei Zeilen entfernen und den nachfolgenden if-Block, also diesen:
if(dlgPrint.DoModal()==IDOK)
komplett entfernen.
Downloads: Drucken im Dialog.exe - Gesamtes Projekt
Drucken mit Druck-Dialog:
Mit Hilfe des Druck-Dialogs kann man Einstellungen bezüglich des Ausdrucks machen, z.B die Auswahl des Druckers auf dem gedruckt werden soll. Um den Drucken-Dialog aufzurufen brauchen wir nur ein Objekt(Variable) der Klasse CPrintDialog zu erstellen:
CPrintDialog dlgPrint(FALSE);
if(dlgPrint.DoModal()==IDOK)
{
// Code zum Drucken
}
Hängen wir jetzt noch das Flag PD_ALLPAGES dran, dann sieht der Druck-Dialog leicht verändert aus:
CPrintDialog dlgPrint(FALSE, PD_ALLPAGES);
if(dlgPrint.DoModal()==IDOK)
{
// Code zum Drucken
}
Siehst du den Unterschied? Es gibt eine ganze Anzahl von Flags die man angeben kann, welche das sind kann man in der MSDN nachlesen.
Wir können den Druck-Dialog auch noch etwas verändert anzeigen. Übergeben wir dazu nun anstatt FALSE mal TRUE, dann sieht der Druck-Dialog so aus:
CPrintDialog dlgPrint(TRUE);
if(dlgPrint.DoModal()==IDOK)
{
// Code zum Drucken
}
Ein komplettes Beispiel wie man etwas aus einem Dialog heraus druckt gibt es hier: Drucken im Dialog
Drucken ohne Druck-Dialog:
Möchte man dem Anwender keine Möglichkeit geben etwas zum Ausdruck einzustellen oder den Drucker auszuwählen, kann man direkt über den als Standard definierten Drucker drucken.
CPrintDialog dlgPrint(FALSE);
// GetDefaults liefert den Standarddrucker
dlgPrint.GetDefaults();
// Code zum Drucken
Ein komplettes Beispiel wie man etwas direkt mit dem Standard-Drucker druckt gibt es hier: Beispiel mit Listenelement in Berichts-Ansicht
Wie man die Daten eines Listenelements aus einem Dialog heraus druckt (auch mehrseitiger Druck) kann hier nachgelesen werden: Beispiel mit Listenelement in Berichts-Ansicht
|
Die Vervielfältigung der auf diesen Seiten enthaltenen Informationen und Grafiken ist untersagt, ausgenommen davon ist sämtlicher auf diesen Seiten angezeigter Quellcode. Es wird keinerlei Gewähr für die Richtigkeit und Vollständigkeit der bereitgestellten Informationen übernommen. Haftungsansprüche für Schäden, die durch Nutzung der bereitgestellten Informationen verursacht wurden, sind ausgeschlossen. Für den Inhalt von angegebenen Verweisen wird keine Gewährleistung übernommen.
Copyright © 2005 coding-help.de | |