Problem mit DruckerCode
-
Hallo
ich hoffe das ich im richtigen Forum dafür bin denn es geht zwar um Code aber welchen der in ner MFC genutzt wird.
Code:
void PrintList(CListCtrl &list) { CDC dc; CPrintDialog printDlg(FALSE); CRect r; int nHeight; // ask the user to select a printer if (printDlg.DoModal() == IDCANCEL) return; // Attach a printer DC dc.Attach(printDlg.GetPrinterDC()); dc.m_bPrinting = TRUE; // use Textmappingmode, that's easiest to map the fontsize dc.SetMapMode(MM_TEXT); // setup font specifics LOGFONT LogFont; CFont aFont, *oldFont; LogFont.lfHeight = -MulDiv(10, GetDeviceCaps(dc, LOGPIXELSY), 72); LogFont.lfWidth = 0; LogFont.lfEscapement = 0; LogFont.lfOrientation = 0; LogFont.lfWeight = 0; LogFont.lfItalic = false; LogFont.lfUnderline = 0; LogFont.lfStrikeOut = 0; LogFont.lfCharSet = ANSI_CHARSET; LogFont.lfOutPrecision = OUT_TT_PRECIS; LogFont.lfClipPrecision = CLIP_DEFAULT_PRECIS; LogFont.lfQuality = DEFAULT_QUALITY; LogFont.lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS; lstrcpy (LogFont.lfFaceName, "MS Sans Serif"); dc.SetBkMode(OPAQUE); aFont.CreateFontIndirect ( &LogFont ); // ok, we've build the font, now use it oldFont = dc.SelectObject( &aFont ); // Get the application title CString strTitle; strTitle.LoadString(AFX_IDS_APP_TITLE); // Initialise print document details DOCINFO di; ::ZeroMemory (&di, sizeof (DOCINFO)); di.cbSize = sizeof (DOCINFO); // application title appears in the spooler view di.lpszDocName = strTitle; //*************Begin a new print job******************************** BOOL bPrintingOK = dc.StartDoc( &di ); // Get the printing extents and store in the m_rectDraw field of a // CPrintInfo object CPrintInfo Info; int w = dc.GetDeviceCaps(HORZRES); int h = dc.GetDeviceCaps(VERTRES); Info.m_rectDraw.SetRect(0,0, w, h); char *startAt = p; // Durch Umbenennung der Funktion gibt es die Variable // nicht mehr, weiss nur net was ich dafür einsetzen muss int totalDone = 0; int lengthToGo = pSize;// das selbe in Grün wie mit p for (UINT page = Info.GetMinPage(); bPrintingOK && (totalDone < lengthToGo); page++) { // begin new page dc.StartPage(); Info.m_nCurPage = page; // calc how much text fits on one page r = Info.m_rectDraw; r.bottom = r.top; int i = 0; while (r.bottom < Info.m_rectDraw.bottom && (totalDone + i < lengthToGo) ) { r.right = Info.m_rectDraw.right; nHeight = dc.DrawText(startAt, i++, r, DT_CALCRECT|DT_WORDBREAK|DT_NOCLIP|DT_EXPANDTABS); } // go one back to assure correct height if (r.bottom >= Info.m_rectDraw.bottom) i--; // print that text dc.DrawText(startAt, i, r, DT_WORDBREAK|DT_NOCLIP|DT_EXPANDTABS); // go to next page startAt += i; totalDone += i; // end page bPrintingOK = (dc.EndPage() > 0); } // end a print job if (bPrintingOK) dc.EndDoc(); else // abort job. dc.AbortDoc(); // restore font dc.SelectObject(oldFont); // free font memory aFont.DeleteObject(); // detach the printer DC dc.Detach(); }
Durch diesen Code will ich es schaffen meine CListCtrl die im Dialog mit Daten gefüllt ist ( Daten : jenachdem was gesucht wird) auszudrucken.
Wie schaff ich es das ich alle Einträge in meienr Liste ausdrucken kann.
Ich denke mal das man dazu eine Schleife einbauen muss und zwar an der Stelle wo ich new Print makiert habe. Nur wie muss diese Schleife aussehen??Gruss
Silver
-
Vielleicht hilft die CListBox::GetCount() und CListBox::GetText() weiter.
Gibt die Anzahl der Elemente deiner Liste wieder.würde dann eine for-Schleife nehmen. In etwa so:
for (int i = 0; i<deineListBox.GetCount(); i++) { ... deineListBox.GetText(i, deinStringBuffer); .... }
-
Ok Danke werd mich da sofort mal durch arbeiten
-
Die Funktionen heißen bei CListCtrl so ähnlich: GetItemCount und GetItemText.
Aber... Silvercreast, liest du eigentlich mal, was hinter den Links steht, die man dir postet?
Ist nur so eine Frage, weil sonst weiß ich, dass ich mir bei dir nicht mehr die Mühe machen muss.
In dem Beispiel zum Drucken von gestern war schon fast der komplette Code im Artikel abgedruckt - der Rest hätte sich im Demoprojekt gefunden. Oder hast du den gar nicht angeguckt, weil Doc/View oben drüber stand?
-
Ich hatte doch geschrieben das ich den Code gar nicht genommen habe sondern einen von codeguru, da ich ja selbst noch gesucht habe
-
@ estartu_de: Hast natürlich Recht mit den Funktionsnamen.
Habe selber nie ein ListControl benutzt und bin daher automatisch zu CListBox gegeangen.
-
Das hatte ich schon gesehen - aber abgucken kann man da doch trotzdem.
-
Stimmt schon bin jetzt noch mal auf den Link gegangen und ich seh schon was du meinst unter dem ersten Code steht das wie das geht
Versprech Besserung
-
-
Na also
Solche Beispiele kann man auch bunt durcheinanderwürfeln. Allerdings muss man auch erstmal auf die Idee kommen.