Problem mit Drucken meines Dokuments
-
Hi!
Ich habe ein Problem mit dem Drucken. Wenn ich meine Zeichnung erstelle und diese
dann drucken möchte, ist das Bild viel zu klein.
Dass dies an der unterschiedlichen Auflösung Drucker/Monitor liegt ist mir mittlerweile schon klar geworden,
aber wie kann ich jetzt mein Dokument immer optimal an eine Din A4 Seite anpassen?
Es soll auch nur im folgenden Bereich geändert werden, wenn dies möglich ist.// CAktivitätsdiagrammView drucken BOOL CZeichnungView::OnPreparePrinting(CPrintInfo* pInfo) { // Standardvorbereitung return DoPreparePrinting(pInfo); } void CZeichnungView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: Zusätzliche Initialisierung vor dem Drucken hier einfügen } void CZeichnungView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: Bereinigung nach dem Drucken einfügen }Es würde mir auch reichen, wenn es einen Befehlt gibt, der die Größe des Ausdrucks einfach verdoppelt.
Auf jeden Fall darf ich an den Pixeln der Zeichnung selbst nichts verändern.Schon mal vielen Dank für die Hilfe

Gruß Mav
-
Setze Dich mit den Mapping Modes eines DCs auseinander.
Passe diesen in OnPrepareDC korrekt an.
Die Auflösung Deines Devies erhälst Du mit GetDeviceCaps LOGPIXELSY/LOGPIXELSXEDIT: Schau Dir das Scribble Tutorial an, da kannst Du das mit den Mappingmodes gut sehen.
-
Ich möchte ja nichts an den Mapping Modes verändern.
Dann müsste ich das komplette Zeichenprogramm und die Elemente die ich verwende wieder ändern.
Kann man nicht "einfach" in der OnPreparePrinting oder so dann die Pixel auf die 2-,3- oder 4-fache Größe skalieren?
Ich gebe in meiner Zeichnung ja auch Text ein und den möchte ich ja auch optimal ausgegeben bekommen.
Ich habe auch schon mit MM_ISOTROPIC und MM_ANISOTROPIC rumprobiert aber bekomme nichts ordentliches hin.
Wäre für ein Beispiel oder so sehr dankbar
Gruß Mav
-
1. Kalkuliert man vorher ein, dass man Drucken will. D.h. man passt sein OnDraw so an, dass es auf jedem mapping Mode funktioniert.
2. Wieso musst Du alles ändern? Alles wird in LPs (logical Points) ausgegeben. Aktuell ist 1LP == 1DP (Device-Point)
3. Dafür ist doch OnPrepareDC da. Den Mapping mode zu ändern.
Anisotropic ist hier ideal...
4. Was hast Du gemacht?
5. Wie wäre es einfach mal mit ein wenig MSDN Doku lesen?
-
1. Ich wusste ja vorher nicht, dass man darauf achten muss.
Eigene Dummheit würde ich mal sagen (oder Unwissenheit).
2. Wie kann ich es am besten realisieren, dass 1LP zu 2 DPs wird?
3. Wo finde ich die OnPrepareDC, hab nur ne OnPreparePrint??
4. Ich habe in der OnDraw mein Mappingmode auf anisotropic geändert.
Dann kam aber nur noch mist mit der Zeichnung.
Wenn ich die Zeichnung auf dem Bildschirm richtig gesehen habe, war sie beim drucken nicht wirklich da.
Wenn ich nicht sehen konnte was ich zeichne ist Sie aber beim drucken erschienen.
Verstehe auch nicht warum...
5. Ich lese schon in der MSDN Doku, werde nur nicht wirklich draus schlau.
Bin anscheinend voll der Noob.Gruß Mav
-
Achso, das muss ich im CZeichnungView::OnDraw angegeben haben, damit meine Zeichnung korrekt angezeigt wird.
Wo muss ich jetzt was ändern, damit beim Drucken die Zeichnung doppelt so groß wird?pDC->SetMapMode(MM_ANISOTROPIC); pDC->SetWindowExt(1, 1);Wenn ich die Werte in SetWindowExt ändere, werden die Symbole falsch gezeichnet.
Wenn ich SetWindowExt mit den Werten 3000 und 3000 füttere wird mir der Ausdruck so erstellt wie ich ihn gerne hätte,
jedoch ist dann die Zeichnung am Bildschirm dahin.
Was mache ich dann jetzt genau falsch, bzw. wo muss ich noch Änderungen vornehmen?Gruß Mav
-
Du musst sowohl SetWindowExt als auch SetViewportExt setzen!
Aus deren Verhältnis ergibt sich das mapping!Ich kann mir nicht vorstellen, dass Du MM_ANISOTROPIC mal in Google eingegeben hast. Der erste Link bringt Dich zu:
http://www.cpp-tutor.de/mfc/mfc/kap5/lektion5.htm
-
Hi!
An der Seite versuche ich mich ja auch schon dran.
Nur der druckt dann trotzdem nichts größer aus.
Ich hab ja im Endeffekt nur noch Probleme mit dem Druck selbst.
Angezeigt wird es mir schon größer in der Seitenansicht.
Ich wäre echt glücklich über ein Beispiel wie ich meinen Drucker
dazu bringe mir die Zeichnung richtig auszudrucken.Gruß Mav
-
Es ist doch alles gesagt:
1. Besorge Dir GetDeviceCaps LOGPIXELSY/LOGPIXELSX für Drucker und Bildschirm
2. Benutze MappingMode MM_ANISOTROPIC und setze SetWindowExt als auch SetViewportExt!
-
Danke vielmals für die Tips, ich habs jetzt endlich hin bekommen

Gruß Mav