Druckvorschauarchitektur
In diesem Artikel wird erläutert, wie das MFC-Framework Druckvorschaufunktionen implementiert. Folgende Themen werden behandelt:
Die Seitenansicht unterscheidet sich etwas von der Bildschirmanzeige und dem Drucken, da die Anwendung den Drucker mithilfe des Bildschirms simulieren muss, anstatt ein Bild direkt auf einem Gerät zu zeichnen. Um dies zu berücksichtigen, definiert die Microsoft Foundation Class Library eine spezielle (nicht dokumentierte) Klasse, die von der CDC-Klasse abgeleitet wird, die aufgerufen wird CPreviewDC
. Alle CDC
Objekte enthalten zwei Gerätekontexte, aber in der Regel sind sie identisch. In einem CPreviewDC
Objekt unterscheiden sie sich: Der erste stellt den simulierten Drucker dar, und die zweite stellt den Bildschirm dar, auf dem die Ausgabe tatsächlich angezeigt wird.
Der Druckvorschauprozess
Wenn der Benutzer im Menü "Datei" den Befehl "Seitenansicht" auswählt, erstellt das Framework ein CPreviewDC
Objekt. Wenn Ihre Anwendung einen Vorgang ausführt, der ein Merkmal des Druckergerätekontexts festlegt, führt das Framework auch einen ähnlichen Vorgang im Bildschirmgerätekontext aus. Wenn Ihre Anwendung beispielsweise eine Schriftart für den Druck auswählt, wählt das Framework eine Schriftart für die Bildschirmanzeige aus, die die Druckerschriftart simuliert. Wenn ihre Anwendung die Ausgabe an den Drucker senden würde, sendet das Framework stattdessen die Ausgabe an den Bildschirm.
Die Seitenansicht unterscheidet sich auch von dem Drucken in der Reihenfolge, in der die einzelnen Seiten eines Dokuments zeichnungen. Während des Druckens setzt das Framework eine Druckschleife fort, bis ein bestimmter Seitenbereich gerendert wurde. Während der Seitenansicht werden jeweils ein oder zwei Seiten angezeigt, und dann wartet die Anwendung. es werden keine weiteren Seiten angezeigt, bis der Benutzer antwortet. Während der Seitenansicht muss die Anwendung auch auf WM_PAINT Nachrichten reagieren, genau wie bei der normalen Bildschirmanzeige.
Die CView::OnPreparePrinting-Funktion wird aufgerufen, wenn der Vorschaumodus aufgerufen wird, genau wie zu Beginn eines Druckauftrags. Die an die Funktion übergebene CPrintInfo-Struktur enthält mehrere Elemente, deren Werte Sie festlegen können, um bestimmte Merkmale des Druckvorschauvorgangs anzupassen. Sie können z. B. den m_nNumPreviewPages Member festlegen, um anzugeben, ob sie eine Vorschau des Dokuments im einseitigen oder zweiseitigen Modus anzeigen möchten.
Ändern der Seitenansicht
Sie können das Verhalten und die Darstellung der Seitenansicht auf verschiedene Arten ändern. Beispielsweise können Sie unter anderem:
Bewirkt, dass das Fenster "Seitenansicht" eine Bildlaufleiste anzeigt, um den Zugriff auf eine beliebige Seite des Dokuments zu erleichtern.
Bewirkt, dass die Seitenansicht Standard die Position des Benutzers im Dokument beibehalten wird, indem die Anzeige auf der aktuellen Seite beginnt.
Führen Sie für die Druckvorschau und den Druck eine andere Initialisierung durch.
Bewirkt, dass die Seitenzahlen in Ihren eigenen Formaten in der Seitenansicht angezeigt werden.
Wenn Sie wissen, wie lange das Dokument ist und mit dem entsprechenden Wert aufgerufen SetMaxPage
wird, kann das Framework diese Informationen sowohl im Vorschaumodus als auch beim Drucken verwenden. Sobald das Framework die Länge des Dokuments kennt, kann es das Vorschaufenster mit einer Bildlaufleiste bereitstellen, sodass der Benutzer im Vorschaumodus durch das Dokument hin- und herblättern kann. Wenn Sie die Länge des Dokuments nicht festgelegt haben, kann das Framework das Bildlauffeld nicht positionieren, um die aktuelle Position anzugeben. Daher fügt das Framework keine Bildlaufleiste hinzu. In diesem Fall muss der Benutzer die Schaltflächen "Nächste Seite" und "Vorherige Seite" auf der Steuerelementleiste des Vorschaufensters verwenden, um das Dokument zu durchlaufen.
Für die Druckvorschau ist es möglicherweise hilfreich, dem m_nCurPage Element CPrintInfo
einen Wert zuzuweisen, auch wenn Sie dies nie für gewöhnliches Drucken tun würden. Während des gewöhnlichen Druckens enthält dieses Element Informationen aus dem Framework zu Ihrer Ansichtsklasse. So teilt das Framework der Ansicht mit, welche Seite gedruckt werden soll.
Wenn der Druckvorschaumodus gestartet wird, enthält das m_nCurPage Element dagegen Informationen in entgegengesetzter Richtung: von der Ansicht bis zum Framework. Das Framework verwendet den Wert dieses Elements, um zu bestimmen, welche Seite zuerst in der Vorschau angezeigt werden soll. Der Standardwert dieses Elements ist 1, sodass die erste Seite des Dokuments anfänglich angezeigt wird. Sie können außer Kraft setzen OnPreparePrinting
, um dieses Element auf die Anzahl der Seite festzulegen, die zum Zeitpunkt des Aufrufs des Befehls "Seitenansicht" angezeigt wird. Auf diese Weise Standard die Anwendung die aktuelle Position des Benutzers beim Wechsel vom normalen Anzeigemodus zum Druckvorschaumodus beibehalten.
Manchmal möchten OnPreparePrinting
Sie möglicherweise unterschiedliche Initialisierungen durchführen, je nachdem, ob sie für einen Druckauftrag oder für die Seitenansicht aufgerufen wird. Sie können dies ermitteln, indem Sie die m_bPreview Membervariable in der CPrintInfo
Struktur untersuchen. Dieses Element ist auf TRUE festgelegt, wenn die Seitenansicht aufgerufen wird.
Die CPrintInfo
Struktur enthält auch ein Element namens m_strPageDesc, das zum Formatieren der Zeichenfolgen verwendet wird, die unten auf dem Bildschirm in einzelseitigen und mehrseitigen Modi angezeigt werden. Standardmäßig sind diese Zeichenfolgen das Format "Page n" und "Pages n - m", aber Sie können m_strPageDesc von innen OnPreparePrinting
ändern und die Zeichenfolgen auf etwas komplexeres festlegen. Weitere Informationen finden Sie in der CPrintInfo-Struktur in der MFC-Referenz .
Siehe auch
Drucken und Druckvorschau
Es wird gedruckt
CView-Klasse
CDC-Klasse