Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Drucken aus Dialog

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.01.2008, 10:41 Uhr
~global
Gast


wie ich an die Größe des DC komme weiss ich nun:

C++:
int width = dcPrint.GetDeviceCaps(HORZRES);
int height = dcPrint.GetDeviceCaps(VERTRES);


damit bekomme ich aber die selben Werte wie mit GetClipBox(), und wenn ich dann das Image in diesen bereich kopiere wird nur ein kleiner teil der Grafik auf die ganze Seite gedruckt. also sind die Werte doch viel zu groß! wenn ich dagegen 780x1180 als Clientbereich angebe wird es so wie es werden soll.
???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.01.2008, 17:19 Uhr
mmc20
puss in boots


hi,

mach mal nach dem "dcPrint.Attach(..)"

C++:
    CSize prnSize;
    dcPrint.SetMapMode( MM_LOENGLISH );
    prnSize.cx = dcPrint.GetDeviceCaps(HORZRES);
    prnSize.cy = dcPrint.GetDeviceCaps(VERTRES);
// Seite löschen ("weiss-machen")
//    dcPrint.PatBlt( 0, 0, prnSize.cx, prnSize.cy, WHITENESS );
    dcPrint.DPtoLP( &prnSize );


debuge mal bis nach dem pDC->DPtoLP(..) da wirste sehen das genau diese 800*1200 (oder so) in prnSize drin sind. dann muste nur noch aufpassen das die y-achse jetzt andersrum ist, also nach oben positiv.
inwieweit dann die Gdiplus-sachen mit diesem CDC kompatibel sind ?!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: