Supportnet / Forum / Anwendungen(Java,C++...)
Drucken einzelner Seiten aus Dialoganwendung (MFC - C++)
Frage
Hallo,
habe folgendes Programm geschrieben, dass Daten aus einer Liste ausdruckt. Allerdings bekomme ich es noch nicht hin, gezielt einzelne Seite auszudrucken. Kann mir jemand einen Tip geben, wie dies funktioniert ?
Danke im vorraus.
MfG
Billiard-Guru
Quellcode:
void CAllgemein::OnDrucken()
{
CPrintDialog dlgPrint(FALSE,PD_ALLPAGES | PD_USEDEVMODECOPIES | PD_NOPAGENUMS | PD_NOSELECTION | PD_HIDEPRINTTOFILE, this);
// show the print dialog.
if(dlgPrint.DoModal() == IDOK)
{
// get handle to printer object.
HDC hdcPrinter = dlgPrint.GetPrinterDC();
if (hdcPrinter!=NULL)
{
CDC dcPrint;
dcPrint.Attach(dlgPrint.GetPrinterDC());
DOCINFO ListControlPrint;
ListControlPrint.cbSize = sizeof(ListControlPrint);
ListControlPrint.lpszDocName = "Übersicht GPS - Daten";
ListControlPrint.lpszOutput = NULL;
ListControlPrint.lpszDatatype = NULL;
ListControlPrint.fwType = NULL;
dcPrint.SetMapMode(MM_LOMETRIC);
int nLaenge = dcPrint.GetDeviceCaps(VERTSIZE);
int nBreite = dcPrint.GetDeviceCaps(HORZSIZE);
int nRechts = nBreite * 10 - 40;
int nUnten = -nLaenge * 10 + 40;
dcPrint.Rectangle(50, 0, nRechts, nUnten);
CFont font, *p_OldFont;
font.CreateFont(-100, 0, 0, 0, 600, 0, 0, 0, ANSI_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, "Verdana");
p_OldFont= dcPrint.SelectObject(&font);
if (dcPrint.StartDoc(&ListControlPrint)>=0)
{
// Eine Seite beginnen
dcPrint.StartPage();
Ausdruck(&dcPrint,p_OldFont, nLaenge, nBreite, nRechts, nUnten);
// Ab hier wird der Ausdruck der Artikel vorbereitet
// Ermitteln der Zeilen des Listenelement
int nAnzahl = m_GPSList.GetItemCount();
int nLaufendeNr = 0;
int nSeitenzahl = 1;
for(int i=0; i < nAnzahl; i++)
{
if(nLaufendeNr<12)
{
nLaufendeNr++;
// Einträge aus Listenelement lesen
CString sNummer = m_GPSList.GetItemText(i,0);
CString sUTC = m_GPSList.GetItemText(i,1);
CString sBreite = m_GPSList.GetItemText(i,2);
CString sNord = m_GPSList.GetItemText(i,3);
CString sLaenge = m_GPSList.GetItemText(i,4);
CString sOst = m_GPSList.GetItemText(i,5);
CString sQualitaet = m_GPSList.GetItemText(i,6);
CString sMSL = m_GPSList.GetItemText(i,7);
CString sEinheit = m_GPSList.GetItemText(i,8);
CString sDatum = m_GPSList.GetItemText(i,9);
CString sKurs = m_GPSList.GetItemText(i,10);
CString sAngabe = m_GPSList.GetItemText(i,11);
CString sHorSpeed = m_GPSList.GetItemText(i,12);
CString sKnoten = m_GPSList.GetItemText(i,13);
// und ausgeben
dcPrint.TextOut(80, -550-nLaufendeNr*80, sNummer);
dcPrint.TextOut(350, -550-nLaufendeNr*80, sUTC);
dcPrint.TextOut(650, -550-nLaufendeNr*80, sBreite);
dcPrint.TextOut(950, -550-nLaufendeNr*80, sNord);
dcPrint.TextOut(1130, -550-nLaufendeNr*80, sLaenge);
dcPrint.TextOut(1390, -550-nLaufendeNr*80, sOst);
dcPrint.TextOut(1560, -550-nLaufendeNr*80, sQualitaet);
dcPrint.TextOut(1680, -550-nLaufendeNr*80, sMSL);
dcPrint.TextOut(1850, -550-nLaufendeNr*80, sEinheit);
dcPrint.TextOut(1980, -550-nLaufendeNr*80, sDatum);
dcPrint.TextOut(2180, -550-nLaufendeNr*80, sKurs);
dcPrint.TextOut(2370, -550-nLaufendeNr*80, sAngabe);
dcPrint.TextOut(2550, -550-nLaufendeNr*80, sHorSpeed);
dcPrint.TextOut(2770, -550-nLaufendeNr*80, sKnoten);
// Seitenzahl ausgeben
CString str;
str.Format("Seite %d ",nSeitenzahl);
dcPrint.TextOut(1000, nUnten+250, str);
}
if(nLaufendeNr==12)
{
nLaufendeNr = 0;
dcPrint.EndPage();
dcPrint.StartPage();
Ausdruck(&dcPrint,p_OldFont, nLaenge, nBreite, nRechts, nUnten);
nSeitenzahl++;
}
}
// 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);
}
}
}
}