CFormView druckproblem



  • Hallo,

    ich habe ein MDI-Projekt mit CFormview als Basisklasse und habe eine Druckerunterstützung nach dem Artikel auf Codeprojecthttp://www.codeproject.com/KB/printing/printformview.aspx implementiert. Klappt bis hierer auch gut. Jetzt hab ich das Ultimate Grid (http://www.codeproject.com/KB/MFC/UltimateGrid.aspx)in einem Static Control der Form implementiert. Das Problem ist, wenn ich die Methode mit

    this->Print( &memDC, PRF_ERASEBKGND|PRF_CLIENT|PRF_CHILDREN );
    

    verwende, wird nicht das Grid in dem Static gezeichnet, sondern nur das Static mit seinem Static-Text. Das liegt (meines Glaubens nach) daran, das das Static nichts von dem Grid weiss. Das Grid wird über Code an das Static angefügt. Wenn das Static dann beim drucken zum neuzeichnen aufgefordert wird, wird eben das Grid nicht gezeichnet.
    Dann habe ich die "Screenshoot" Methode Probiert. hat auch ganz gut funktioniert, doch werden beim Drucken statusfenster vom Druckertreiber angezeigt ("Seite 2 von 5 wird gedruckt") die dann auf dem Ausdruck erscheinen.
    Falls mir jemand einen Tip geben kann wäre ich ihm sehr dankbar um das Grid auszudrucken.

    Grüße
    Micha


  • Mod

    Wie ist das nun? Ist in dem Static ein Grid? Schau es Dir im Spy++ an.
    Wenn ein echter Subclass erfolgt müsste es gehen.
    Außer das Grid kann WM_PRINT eben nicht... Wenn das grid dies nicht implementoiert hast Du gar nichts davon.

    Ansonsten erzeuge das Grid doch einfach an der selben Stelle an der das CStatic liegt.



  • Das Grid wird innerhalb des Static angezeigt. Es ist über AttachGrid() an das Static angehängt. AttatchGrid führt u.a. SubclassDlgItem() durch.
    Im Spy++ kann ich das Static sehen und angehängt die einzelnen Teile des grids (Scrollbar, Header usw.) Woran erkenne ich denn, ob das Grid WM_PRINT unterstützt?
    Wenn ich

    this->Print( &memDC, PRF_ERASEBKGND|PRF_CLIENT|PRF_CHILDREN );
    

    nutzen will, meinst du sollte ich einfach das grid mit dem memDC reinzeichnen? Oder wie soll ich denn sonst das grid erzeugen?

    Gruß und dank

    Micha


  • Mod

    Besorge Dir doch einfach das Handle des Grid Controls innerhalb des CStatic und probiere es auf das Print auszuführen...

    Das CStatic weiß nicht von seinen Childwindows..
    Eigentlich ist solch ein Konstrukt ziemlich dämlich.
    Ich verwende meistens solch ein CStatic nur als Platzhalte, d.h. ich erzeuge in den selben Ausmassen ein neues Control. Platziere es in die Z-Order und entferne das CStatic... 😉

    Ich habe mich nie mit dem Dundas Zeigs anfreunden können.



  • Ich habe jetzt versucht mit CreateGrid (Ruft CWnd::Create() auf) das ganze darzustellen. Immerhin werden dann die Scrollbars im Ausdruck gezeigt. Ich hab herausgefunden, das es fürs drucken eine eigene klasse des Grids gibt (CUGPrint). wenigstens erscheint damit das Grid auf dem Ausdruck (nimmt das CDC). Ich muss es nur noch "etwas" auf meine bedürfnisse anpassen (). Ich muss sagen, da ist das Ultimate grid nicht sehr praktikabel. Das kostet bestimmt ein bis zwei tage...:(
    Danke Martin für deine hilfe

    Grüße
    Micha


Anmelden zum Antworten