Nur einen bestimmten Bereich der Grafik drucken



  • Hi!

    Ich habe eine Funktion, die meine Grafik zeichnet:

    Draw(HDC hDC,int xPage,int yPage);

    So, jetzt will ich das Zeug ausdrucken:

    HWND hCombo = GetDlgItem(hDlg,PRINT_COMBO);
    HDC hPrinterDC;
    
    int cursel = SendMessage(hCombo,CB_GETCURSEL,0,0);
    char *pcPrinterName = new char[SendMessage(hCombo,CB_GETLBTEXTLEN,cursel,0) + 1];
    SendMessage(hCombo,CB_GETLBTEXT,cursel,(LPARAM) pcPrinterName);
    
    hPrinterDC = CreateDC(0,pcPrinterName,0,0);
    
    int xPage = GetDeviceCaps(hPrinterDC,HORZRES);
    int yPage = GetDeviceCaps(hPrinterDC,VERTRES);
    
    DOCINFO di = { sizeof(DOCINFO),"graph++" };
    if(StartDoc(hPrinterDC,&di) > 0)
    {
        if(StartPage(hPrinterDC) > 0)
        {
            graph_pp::Exemplar()->Draw(hPrinterDC,xPage,yPage);
    
            if(EndPage(hPrinterDC))
            {
                EndDoc(hPrinterDC);
            }
            else
            {
                MessageBox(0,"Fehler beim Drucken","graph++",MB_OK | MB_ICONSTOP);
                return FALSE;
            }
        }
    }
    
    DeleteDC(hPrinterDC);
    

    funzt auch super. ABER: Die Funktion Draw zeichnet Graphen, die man im Fenster nicht ganz sieht, weil sie so lang sind, und das ist auch gut so :). Wenn ich das Teil jetzt aber drucke, sind die Graphen länger, weil das Papier ja auch höher ist. Wie mache ich das, dass nur in ein bestimmtes Quadrat (0,0,xPage,xPage) gedruckt wird?

    thx & cu

    [ Dieser Beitrag wurde am 07.12.2002 um 14:57 Uhr von MagiC Creator editiert. ]



  • Du kannst einfach das Koordinatensystem verändern.
    Ich würde den Ursprung etwas verschieben und die Größe der Achsen anpassen, schon kannst du deine Drawfunktion weiterverwenden.



  • Hmm... das Koordinatensystem wird in der Draw-Funktion schon geändert. Es ist ja nur das Problem, dass die Ausgabe im Fenster ja gleich bleiben soll, nur beim Drucken soll halt nicht das ganze Blatt bedruckt werden, sondern nur das Quadrat(0,0,xPage,xPage). Den Wert von xPage hab ich von GetDeviceCaps(hPrinterDC,HORZRES).

    thx & cu

    @cd9000: Deine Dll funzt übrigens super, nochmal Danke! 🙂



  • So, ich hab jetzt selbst was rausgefunden, für alle die's interessiert:

    IntersectClipRect(HDC,int,int,int,int);

    Funktioniert bestens :)!

    cu


Anmelden zum Antworten