tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
798
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    weicor weicor ist offline Grünschnabel
    Registriert seit
    Mar 2004
    Beiträge
    4
    Hallo!
    Ich braüchte etwas Hilfe. Ich habe eine MFC Anwendung geschrieben, die Graphen darstellt. Jetzt möchte ich nur noch die Graphen auch drucken können, das macht es ja auch, nur viel zu klein.
    Wie vergrößere ich das Druckbild?
     

  2. #2
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Versuch mal eine geringere Druckerauflösung für die Ausgabe oder erzeuge eine grössere Bitmap.
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  3. #3
    weicor weicor ist offline Grünschnabel
    Registriert seit
    Mar 2004
    Beiträge
    4
    Guter Vorschlag, Danke! Aber wie mach ich das? Hab nicht so die Ahnung davon!
    Würde mich freuen wenn du mir das erklären könntest!
     

  4. #4
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Wie machst du es denn im Moment? Kannst du das etwas näher erklären?
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  5. #5
    weicor weicor ist offline Grünschnabel
    Registriert seit
    Mar 2004
    Beiträge
    4
    Also im Moment hab ich nur die zwei Funktionen eingefügt:

    BOOL CVGraphicView::OnPreparePrinting(CPrintInfo* pInfo)
    {
    pInfo->SetMaxPage(1);
    return DoPreparePrinting(pInfo);
    }

    void CVGraphicView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
    {
    CSize sizeTotal;
    sizeTotal.cx = sizeTotal.cy = 1000;
    SetScrollSizes(MM_LOENGLISH, sizeTotal);
    OnDraw(pDC);
    }
     

  6. #6
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    da ich selber nicht weiss, wie man das am besten löst, habe ich mal herumgesucht. Bei der MSDN Lib beim Thema CPrintInfo das Beispiel DIBLOOK angeben. Ich habe mir das mal angesehen und folgende interessante Routine entdeckt:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    
    void CDibView::OnDraw(CDC* pDC)
    {
        CDibDoc* pDoc = GetDocument();
     
        HDIB hDIB = pDoc->GetHDIB();
        if (hDIB != NULL)
        {
            LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
            int cxDIB = (int) ::DIBWidth(lpDIB);         // Size of DIB - x
            int cyDIB = (int) ::DIBHeight(lpDIB);        // Size of DIB - y
            ::GlobalUnlock((HGLOBAL) hDIB);
            CRect rcDIB;
            rcDIB.top = rcDIB.left = 0;
            rcDIB.right = cxDIB;
            rcDIB.bottom = cyDIB;
            CRect rcDest;
            if (pDC->IsPrinting())   // printer DC
            {
                            /// Ab hier wird's interessant! 
                            /// (Wird für Druck aufgerufen)
        
     
                // get size of printer page (in pixels)
                int cxPage = pDC->GetDeviceCaps(HORZRES);
                int cyPage = pDC->GetDeviceCaps(VERTRES);
                // get printer pixels per inch
                int cxInch = pDC->GetDeviceCaps(LOGPIXELSX);
                int cyInch = pDC->GetDeviceCaps(LOGPIXELSY);
     
                //
                // Best Fit case -- create a rectangle which preserves
                // the DIB's aspect ratio, and fills the page horizontally.
                //
                // The formula in the "->bottom" field below calculates the Y
                // position of the printed bitmap, based on the size of the
                // bitmap, the width of the page, and the relative size of
                // a printed pixel (cyInch / cxInch).
                //
                rcDest.top = rcDest.left = 0;
                rcDest.bottom = (int)(((double)cyDIB * cxPage * cyInch)
                        / ((double)cxDIB * cxInch));
                rcDest.right = cxPage;
            }
            else   // not printer DC
            {
                rcDest = rcDIB;
            }
            ::PaintDIB(pDC->m_hDC, &rcDest, pDoc->GetHDIB(),
                &rcDIB, pDoc->GetDocPalette());
        }
    }
    Hilft dir das weiter? Ich kann dir das Beispielprojekt schicken, falls du es nicht ohnehin schon angesehen hast.
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  7. #7
    weicor weicor ist offline Grünschnabel
    Registriert seit
    Mar 2004
    Beiträge
    4
    Vielen Dank! Ich werds mir ansehen und ausprobieren. Wenn du mir das Beispiel schicken könntest wär auch nicht schlecht.
     

  8. #8
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Ich weiss deine Emailadresse nicht. Die brauche ich, oder du saugst es dir selber hier: DIBLOOK Beispiel in MSDN online.
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

Ähnliche Themen

  1. 3D Graphen Zeichnen
    Von Brätzelbäcker im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 26.11.10, 08:36
  2. 2D Graphen
    Von Pichel im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 10.09.08, 15:26
  3. ASP.NET und schöne Graphen?
    Von Eroli im Forum .NET Web und Kommunikation
    Antworten: 4
    Letzter Beitrag: 23.07.08, 21:58
  4. Graphen wie z.b. x^1/3 zeichnen in php
    Von Astror Enales im Forum PHP
    Antworten: 1
    Letzter Beitrag: 27.11.06, 17:35
  5. Graphen problem
    Von cycovery im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 09.06.06, 11:17