000
14.01.2008, 13:42 Uhr
~global
Gast
|
Hallo, ich muss in einer normalen DialogAnwendung eine Grafik drucken. leider komme ich nicht so damit klar, weil ich irgendwie nicht so recht an den "bedruckbaren Bereich" ran komme. habe es mit getClipBox() versucht, aber da bekomme ich einen zu großen bereich (4676x6814) eigentlich müssten es so ca. 780x1180 sein. muss ich da noch was umrechnen?
hier mal mein bisheriger code:
C++: |
void CDrawManagerDlg::OnPrinting() { //... Gdiplus::Image* pImage; //... pImage aus Datenbank laden CPrintDialog dlgPrint( FALSE, PD_ALLPAGES, this );
if ( dlgPrint.DoModal() == IDOK ) { CDC dcPrint; dcPrint.Attach(dlgPrint.GetPrinterDC());
DOCINFO docInfo; docInfo.cbSize = sizeof( docInfo ); docInfo.lpszDocName = "Zeichnung"; docInfo.lpszOutput = NULL; docInfo.lpszDatatype = NULL; docInfo.fwType = NULL;
if ( dcPrint.StartDoc(&docInfo) >= 0 ) { dcPrint.StartPage(); //////////////////////////////////////////////////////////////////////////// // Zeichnen beginnen
// todo: // clientbereich des druckers holen !
CRect rect, rcClient( 0, 0, 780, 1180 ); dcPrint.GetClipBox( &rect );
// querformat bzw hochformat anpassen !
//... //... hier einige berechnungen um die grafik in die seite einzupassen //... BeginWaitCursor();
Gdiplus::Rect destRect( 0, 0, rcClient.Width(), rcClient.Height() ); Gdiplus::Graphics gdiGraph( dcPrint.m_hDC ); gdiGraph.SetInterpolationMode( Gdiplus::InterpolationModeHighQualityBicubic ); gdiGraph.DrawImage( pImage, destRect, topLeft.x, topLeft.y, viewWidth, viewHeight, Gdiplus::UnitPixel);
EndWaitCursor();
dcPrint.EndPage(); dcPrint.EndDoc(); } dcPrint.DeleteDC(); } if ( pImage ) delete pImage; }
|
|