Tutorials zu Drucken !?
-
Ok Moment hmm ich hätte es auch mal ausprobieren sollen mehrere zu drucken dann wäre mir das wahrscheinlich aufgefallen hups
Ok ich kümmer mich drum das zu ändern, erstmal gucken wie ich das mache.
Dann setz ich den überarbeiteten Code hier rein.
Gruss Silver
-
@estartu_de: aso
@(D)Evil: das ist ja kein problem:
alles von StartDoc() bis EndDoc() in eine schleife und dann in der schleife rgendwas auf den DC schreiben
-
die Standartversion von OnBeginPrinting sieht so aus
void CTtestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // ZU ERLEDIGEN: Zusätzliche Initialisierung vor dem Drucken hier einfügen }
Hier muss das Kommentar von den Paramtern entfernt werden
->void CTtestView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)Innerhalb der OnBeginPrinting() Funktion muss die Anzahl der zu druckenden Seiten festgelegt werden. Dies geschieht mit hilfe von
void SetMaxPage( UINT nMaxPage )
z.B. pInfo->SetMaxPage(3);Desweiteren müssen die Informationen über en Drucker-Gerätekontext mit Hilfe von
GetDeviceCaps() beschafft werden.
z.b.:
int pageHeight = pDC->getDeviceCaps(VERTRES);
int logPixelsY = pDC->getDeviceCaps(LOGPIXELSY);
...
VERTRES z.b. ist eine Konstante die die Pixel in Vertikaler Richtung angibt die bedruckt werden können. die Horizontale Konstatnte wäre HORZRES.
Insgesamt gibt es 29 versch. Konstaten die ich jetzt hier nicht alle aufzählen möchte ^^mit diesen Werten kann man dann z.b. Berechnen was noch auf eine Seite passt und was nicht.
Hat man das alles hinter sich und schaut sich das an freut man sich das man auf mehreren Seiten etwas sieht. Aber halt! da steht immer das gleiche.
Den Ursprung festlegen:
Damit die zweite und folgenden seiten korrekt ausgegeben werden muss man MFC noch mitteilen wo die Seitenanfänge liegen.
Dazu muss man zuerst OnPrepareDC() überschreiben:
z.b. so:void CPrint1View::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) { if (pDC->IsPrinting()) { int pageHeight = pDC->GetDeviceCaps(VERTRES); int originY = pageHeight * (pInfo->m_nCurPage - 1); pDC->SetViewportOrg(0,-originY); } CView:: OnPrepareDC(pDC,pInfo); }
OnPrepareDC() wird aufgerufe, kurz bevor Daten auf den Bildschirm bzw auf den Drucker ausgegeben werden.
So das ganze hab ich mehr oder weniger aus einem Buch abgepinselt ich hoff mal ich hab nichts vergessen.
ich hoff es hilft das ganze auf mehrere Seiten zu erweitern
-
aso, falls ich mal mit MDI / SDI arbeite hab ich ja jetzt was
ich benutzte ja immer nur Dialogfelder
-
Taelan, eines hast du vergessen:
Welches Buch?Aber die Beschreibung ist super!
Ich such mal durch die Faq, wenn da noch nix in der Art ist, kommts rein.Nein, das scheint es noch nicht zu geben...
Mach bitte mal die schöne Erklärung von eben mit Quellangabe als neuen Beitrag mit einer sprechenden Überschrift, ich verschiebe es dann.
-
Oh sry vor lauter tippen doch tatsächlich die Quelle vergessen ^^
Das Buch heisst:
Visual C++.Net, Markt+Technik von Kate Gregory ISBN: 3827264596kann ich absoluten Einsteigern eher weniger empfehlen aber wenn man sich mal etwas mit VC++/MFC zurechtgefunden hat ist es wirklich gut
@Redskall
Huch das mit dem Dialogbasiert hab ich wohl großzügig überlesen ^^
Kommt daher das ich mich dran gewöhnt hab SDI/MDI Anwendungen mit CFormViews zu machen
-
@Taelan: no problem
würde eigentlich auch gerne mal mit FormViews arbeiten aber traue mich nicht ^^
-
Ist eigentlich ganz einfach
neues projekt und auf der letzten Seite wo du die Dateinamen ändern kannst auf CFormView stellen.
Dann kannst du deine Sachen wie üblich im ressourcen Editor zeichnen.Das einzige was im ersten moment etwas komisch ist, ist das umschalten zwischen versch. Formviews in einer SDI anwendung. Aber zum Glück hab ich 2 nette Informatiker hier die mir das geschrieben haben
-
Taelan schrieb:
Ist eigentlich ganz einfach
neues projekt und auf der letzten Seite wo du die Dateinamen ändern kannst auf CFormView stellen.
Dann kannst du deine Sachen wie üblich im ressourcen Editor zeichnen.Das einzige was im ersten moment etwas komisch ist, ist das umschalten zwischen versch. Formviews in einer SDI anwendung. Aber zum Glück hab ich 2 nette Informatiker hier die mir das geschrieben haben
Jupp, es ist wirklich einfach, ich habe genau das hier.
Wegen Umschalten, guck mal in die FAQ.Taelan, machst du den Beitrag?
-
habe schon mal ne anwendung gebastelt zum ausprobieren und kahm genau das was du meinst mit 'etwas komisch'
ich versuche es demnächst wenn ich zeit dafür hab !!
danke für die motivation, und sorry für den missbrauch des threads ^^
-
@estardu
stimmt, das wär genau das gewesen was ich gebraucht hätte ^^btw welchen Beitrag?
-
estartu_de schrieb:
Aber die Beschreibung ist super!
Ich such mal durch die Faq, wenn da noch nix in der Art ist, kommts rein.Nein, das scheint es noch nicht zu geben...
Mach bitte mal die schöne Erklärung von eben mit Quellangabe als neuen Beitrag mit einer sprechenden Überschrift, ich verschiebe es dann.
-
Achso sry hab ich wohl übersehen
klar ich kann das fürs Faq nochmal schön ausführen, allerdings fürchte ich wird das bis heut abend dauern, da ich mich vorher nochmal bei nem Freund mit den mysterien von seinem WLan Router rumärgern muss.
(der hat nicht wie ich es gewohnt bin eine statische IP sondern scheint diese irgendwie zu wechseln - sehr strange)
-
Kein Problem, schreib einfach dran, dass es für die FAQ ist.
Ich schiebs dann bei Gelegenheit.
-
öhm.. na, wie siehst aus.. wollte hier net jemand was für den FAQ machen
-
Es ist Taelan zwischendurch schon wieder eingefallen...
-
so hier jetzt endlich der Text für den FAQ:
-
Sollte zwar eigentlich als neuer Beitrag gepostet werden, aber so konnte ich mal ne neue Funktion austesten.
Ist schon "drüben".Danke
-
huch ^^
und schon merk ich das ich unsauber gearbeitet hab
bei "Mehrere seiten drucken" muss ganz an den Anfang noch die Deklaration
für die Membervariable "m_numRects" im Document.Falls du den Beitrag editieren kannst:
Nun brauchen wir eine Membervariable in unserem Document
Dazu erstellen wir wie gewohnt die Membervariable m_numRects
und initialisieren sie im Konstruktor des Documents:CPrint1Doc::CPrint1Doc():m_numRects(7) { // ZU ERLEDIGEN: Hier Code für One-Time-Konstruktion einfügen }
-
Ist drin.
Schau nochmal in Ruhe drüber, ich guck auch nochmal.
Kleinigkeiten hatte ich ja schon ausgebessert.