Silvercreast
Erfahrenes Mitglied
Hallo erstmal Allerseits
Ich habe ein Problem mit meinem DruckerCode naja Problem kann man das net nennen, aber eine Frage dazu. Erstmal zu meinem Code: Es handelt sich um eine Musik Datenbank in der man Lieder speichern und suchen kann. Die Suchergebnisse sollen in einer CListCtrl ausgegeben werden und zwar in 5 Spalten:
Regal; Interpret; Titel; Rubrik; CD
Das alles funktioniert auch einwandfrei.
Selbst das Drucken funktioniert, momentan lass ich aber nur das Regal (Grün hinterlegt) ausdrucken. Das Problem er druckt jedes Regal für sich ( Wenn ich Regal A und B hab hat Regal A eine Seite und B eine Seite) , kann das vielleicht an dem Orange hinterlegtem Code liegen Wenn ja wie kann ich das ändern ich glaub einfach raus löschen geht ziemlich in die Hose oder
Ich habe ein Problem mit meinem DruckerCode naja Problem kann man das net nennen, aber eine Frage dazu. Erstmal zu meinem Code: Es handelt sich um eine Musik Datenbank in der man Lieder speichern und suchen kann. Die Suchergebnisse sollen in einer CListCtrl ausgegeben werden und zwar in 5 Spalten:
Regal; Interpret; Titel; Rubrik; CD
Das alles funktioniert auch einwandfrei.
Selbst das Drucken funktioniert, momentan lass ich aber nur das Regal (Grün hinterlegt) ausdrucken. Das Problem er druckt jedes Regal für sich ( Wenn ich Regal A und B hab hat Regal A eine Seite und B eine Seite) , kann das vielleicht an dem Orange hinterlegtem Code liegen Wenn ja wie kann ich das ändern ich glaub einfach raus löschen geht ziemlich in die Hose oder
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**************************************************
CString Line;
BOOL bPrintingOK = dc.StartDoc( &di );
for (int i = 0; i<list.GetItemCount(); i++)
{
Line = list.GetItemText(i, 0);
list.GetItemText(i, 1);
list.GetItemText(i, 2);
list.GetItemText(i, 3);
list.GetItemText(i, 4);
// 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);
const char *startAt = LPCTSTR(Line);
int totalDone = 0;
int lengthToGo = Line.GetLength();
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();
}