B
Ich denke nicht, da das kein besonders komplexes Thema ist, bzw die MFC gar nicht viel dafür anbietet (kann mich aber auch täuschen).
Ich habe noch ein altes Projekt, in dem ich mit MFC gearbeitet und gedruckt hab. Es kann gut sein, dass es bessere Lösungen gibt, aber vielleicht hilft dir das ja:
// Bei PD_RETURNDEFAULT wird kein "Drucken"-Dialog gezeigt, sondern die Standardwerte genommen.
// Näheres siehe http://msdn.microsoft.com/en-us/library/ms646843(VS.85).aspx
PRINTDLG PrintDlgData = { sizeof(PRINTDLG), m_hWnd, NULL, NULL, NULL, PD_RETURNDC|PD_RETURNDEFAULT };
if ( PrintDlg( &PrintDlgData ) )
{
if ( ! PrintDlgData.hDC )
{
MessageBox( "Der Drucker konnte nicht gefunden werden!", "Kein Drucker!", MB_ICONWARNING );
// Fehler..
}
DOCINFO DocInfo = { sizeof(DOCINFO), "Bladruck", NULL, NULL, NULL };
CDC dc;
dc.Attach( PrintDlgData.hDC );
dc.StartDoc( &DocInfo );
// Hier normal in den DC zeichnen..
// edit: Jede zu druckende Seite in StartPage und EndPage einfassen
// Bsp.:
for ( int i=0; i<10; i++ )
{
dc.StartPage();
dc.TextOut( ... );
dc.EndPage();
}
dc.EndDoc();
dc.Detach();
DeleteDC( PrintDlgData.hDC );
}
Als Schrift-Größe hatte sich bei mir folgendes bewährt:
int FontHeight = - MulDiv( 12, dc.GetDeviceCaps(LOGPIXELSX), 72 );
HFONT hFont = CreateFont( FontHeight, FontHeight/2, 0, 0, FW_THIN, false, false, false, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, "Ms Sans Serif" );
edit:
Noch was gefunden. Als ungefähre Char-Block-Größe hab ich mit der obigen Schriftart den Text etwa so ausgegeben:
int Row = - (int)((double)FontHeight*1.3f);
TextOut( dc, Row*4, Row*2, ... ); // Quasi dritte Zeile, praktisch um 4 eingerückt.