TN030: Anpassen des Drucks und der Seitenansicht

HinweisHinweis

Im Folgenden technischen Hinweis ist nicht aktualisiert wurde, seitdem er erstmals in der Onlinedokumentation enthalten waren.Folglich können mehrere Prozeduren und Themen veraltet oder falsch.Die aktuellsten Informationen wird empfohlen, zum Thema Onlinedokumentations im Index finden.

Dieser Hinweis beschreibt die Schritte zum Anpassen des Drucks und der Seitenansicht und beschreibt die Zwecke der Rückruf routinen, die in CView verwendet werden und der Rückruf routinen und der Memberfunktionen von CPreviewView.

Das Problem

MFC stellt eine vollständige Lösung für den meisten Drucken bereit und Seitenansicht erfordert.In den meisten Fällen ist wenig zusätzlichen Code erforderlich, um eine Ansicht über die Lage ist, und das Drucken in der Vorschau anzuzeigen.Es gibt jedoch Möglichkeiten zum Drucken optimiert, die erheblichen Aufwand der Seiten des Entwicklers erforderlich ist, und einige Anwendungen müssen bestimmte Benutzeroberflächenelemente im Modus für die Seitenansicht hinzufügen.

Effizienter Drucken

Wenn eine MFC-Anwendung mithilfe der Standardmethoden Windows verweist, werden alle Aufrufe der Geräteschnittstelle ausgegebenen grafischen GDI () auf eine Metadatei im Speicher.Wenn EndPage Windows aufgerufen wird, gibt der Metadatei einmal für jedes physische Band erneut, die der Drucker erfordert, eine Seite zu drucken.Während dieses Renderns GDI Abfragen häufig die Abbruchprozedur zu bestimmen, wenn sie fortgesetzt wird.Normalerweise lässt die Abbruchprozedur die zu verarbeitenden Meldungen, sodass der Benutzer den Druckauftrag mithilfe eines Dialogfelds Drucken abbrechen kann.

Leider kann es sich um den Druckvorgang verlangsamen.Wenn der Druckvorgang in Ihrer Anwendung als schneller sein muss, um mithilfe der standardmäßigen technik erzielt werden kann, müssen Sie manuelle Streifenbildung implementieren.

Druckband

Um manuell Band, müssen Sie in der Schleife Implementieren von print so, dass OnPrint mehr als einmal pro Seite (einmal pro Band).Die Schleife wird in der Druckvorgang OnFilePrint-Funktion in viewprnt.cpp implementiert.In Ihrem CView abgeleitete Klasse überladen, damit Sie diese Funktion, Meldungszuordnungs der Eintrag für die Behandlung der Befehl Drucken der Druckfunktion aufruft.Kopieren Sie die OnFilePrint Routine Drucks und ändern Sie die Schleife, um Streifenbildung zu implementieren.Sie möchten wahrscheinlich auch das Streifenbildungs den rechteck Druckfunktionen übergeben, sodass Sie die Zeichnung auf den Abschnitt der Seite optimieren können, die gedruckt wird.

Zweitens müssen Sie QueryAbort beim Zeichnen des Bands oft aufrufen.Andernfalls wird die Abbruchprozedur nicht aufgerufen, und der Benutzer ist nicht möglich, den Auftrag abzubrechen.

Seitenansicht: Elektronisches Papier mit Benutzeroberfläche

Seitenansicht versucht, im Wesentlichen die Anzeige zu einer Emulation eines Druckers umzuwandeln.Standardmäßig wird der Clientbereich des Hauptfensters ein oder zwei Seiten innerhalb des Fensters vollständig anzuzeigen.Der Benutzer kann in einem Bereich der Seite, um sie zum Vergrößern in ausführlicher anzuzeigen.Mit zusätzliche Unterstützung wird dem Benutzer möglicherweise sogar zulässig, um das Dokument im Seitenansichtsmodus zu bearbeiten.

Anpassen der Seitenansicht

Dieser Hinweis wird nur von einem Aspekt einer Änderung der Seitenansicht: Seitenansichtsmodus der Benutzeroberfläche hinzufügen.Andere Änderungen sind möglich, aber solche Änderungen sind außerhalb des Rahmens dieser Diskussion.

So Seitenansichtsmodus der Benutzeroberfläche hinzufügen

  1. Führt eine Vorberechnung einer Ansichtsklasse von CPreviewView.

  2. Fügen Sie Benutzeroberfläche-Aspekte für die Befehlshandler hinzu, die Sie benötigen.

  3. Wenn Sie visuelle Aspekte zur Anzeige hinzufügen, überschreiben Sie OnDraw, und übergeben Sie die Zeichnung aus, nachdem Sie CPreviewView::OnDraw. aufgerufen haben

OnFilePrintPreview

Dies ist der Befehlshandler für die Seitenansicht.Die Standardimplementierung ist:

void CView::OnFilePrintPreview()
{
    // In derived classes, implement special window handling here
    // Be sure to Unhook Frame Window close if hooked.

    // must not create this on the frame. Must outlive this function
    CPrintPreviewState* pState = new CPrintPreviewState;

    if (!DoPrintPreview(AFX_IDD_PREVIEW_TOOLBAR, this,
                RUNTIME_CLASS(CPreviewView), pState))
    {
        // In derived classes, reverse special window handling
        // here for Preview failure case

        TRACE0("Error: DoPrintPreview failed");
        AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
        delete pState;      // preview failed to initialize, 
                    // delete State now
    }
}

DoPrintPreview blendet den Hauptbereich der Anwendung aus.Steuerleisten, wie die Statusleiste, können beibehalten werden, indem sie in pState->dwStates-Member angibt (dies ist eine Bitmaske und die Bits für einzelne Steuerleisten werden durch AFX_CONTROLBAR_MASK(AFX_IDW_MYBAR)) definiert.Das Fenster pState->nIDMainPane ist das Fenster, das automatisch und reshown ausgeblendet ist.DoPrintPreview erstellt dann eine Schaltfläche leiste für die Standard- als Miniaturansicht Benutzeroberfläche.Wenn, wie Klassenbehandlung Fenster ist erforderlich, um andere Fenster ausgeblendet oder angezeigt, die ausgeführt werden sollen, bevor DoPrintPreview aufgerufen wird.

Wenn die Seitenansicht beendet, gibt sie die Steuerleisten zu ihren ursprünglichen Zustand und den Hauptbereich zu sichtbarem zurück.Wenn eine Sonderbehandlung erfordert, sollte sie in einer Überschreibung der EndPrintPreview. ausgeführt werden Wenn DoPrintPreview fehlschlägt, stellen Sie auch eine Sonderbehandlung bereit.

DoPrintPreview wird aufgerufen:

  • Die Ressourcen-ID der Dialogfeldvorlage für die Symbolleiste Vorschau.

  • Ein Zeiger auf die Ansicht, um das Drucken für die Seitenansicht auszuführen.

  • Die Laufzeitklasse der Vorschau-Ansichtsklasse.Dies wird in DoPrintPreview dynamisch erstellt.

  • Der CPrintPreviewState-Zeiger.Beachten Sie, dass die CPrintPreviewState-Struktur (oder die abgeleitete Struktur, wenn die Anwendung mehr beibehaltenen Zustand erfordert) nicht auf den Frame erstellt werden dürfen.DoPrintPreview ist nicht modale und diese noch vorhandenen Struktur muss, bis EndPrintPreview aufgerufen wird.

    HinweisHinweis

    Wenn eine separate Ansicht oder eine Ansichtsklasse für das Drucken der Unterstützung erforderlich ist, sollte ein Zeiger auf dieses Objekt als zweiten Parameter übergeben werden.

EndPrintPreview

Dies wird aufgerufen, um den Modus für die Seitenansicht zu beenden.Es ist häufig wünschenswert, durchlaufen die Seite im Dokument, die zuletzt in der Seitenansicht angezeigt wurde.EndPrintPreview ist die Möglichkeit, das der Anwendung ausführen.Der pInfo->m_nCurPage-Member ist die Seite, die zuletzt angezeigten Textes (am weitesten links befindende, wenn zwei Seiten angezeigt wurden), und der Zeiger ist ein Hinweis auf der Seite, zu dem der Benutzer interessiert ist.Da die Struktur der Ansicht der Anwendung das Framework nicht bekannt ist, müssen Sie den Code, um zum ausgewählten Punkt bereitstellen.

Sie sollten die meisten Aktionen durchführen, bevor Sie CView::EndPrintPreview aufrufen.Dieser Aufruf gibt die Auswirkungen von DoPrintPreview und löscht die pView, pDC und pInfo.

// Any further cleanup should be done here.
CView::EndPrintPreview(pDC, pInfo, point, pView);

CWinApp::OnFilePrintSetup

Hierbei muss Drucks-Setup für das Menüelement zugeordnet sind.In den meisten Fällen ist es nicht notwendig, die Implementierung zu überschreiben.

Seiten-Nomenklatur

Andere Thema wird das die Seitenzahl und der angegebenen Reihenfolge.Für einfache Textverarbeitungsprogramm typ-Anwendungen ist dies ein einfaches Problem.Die meisten systeme Seitenansicht davon ausgegangen, dass jede gedruckte Seite zu einer Seite im Dokument entspricht.

Wenn Sie versuchen, eine allgemeine Lösung bereitzustellen, gibt es einige Punkte zu berücksichtigen sind.Stellen Sie sich ein CAD-System vor.Der Benutzer hat eine Zeichnung, die einige E-SIZE-Blätter abdeckt.Auf einen Plotter E-SIZEs (oder einem kleineren, skaliert) würde z. B. Seitenzahl im einfachen Fall sein.Aber in einem Laserdrucker pro Blatt, 16 Ein-SIZE-Seiten Druckvorgang wird, was für eine Seitenansicht "Page"?

Wie die einführenden Absatz Bedingungen, die Seitenansicht wie ein Drucker agiert.Daher sieht der Benutzer, was aus den speziellen Druckern herauskommen würde der ausgewählt ist.Er ist bis auf die Ansicht, die bestimmt, welches Bild auf jeder Seite gedruckt wird.

Die Seiten beschreibungs in der Zeichenfolge CPrintInfo-Struktur stellt ein Verfahren zum Anzeigen der Seitenzahl für den Benutzer, wenn sie als eine Zahl pro Seite angezeigt werden kann (z. B. "in Seite 1 " oder "seitenweise 1-2").Diese Zeichenfolge wird von der Standardimplementierung von CPreviewView::OnDisplayPageNumber verwendet.Wenn eine andere Anzeige benötigt wird, können Sie diese virtuelle Funktion überschreibt, um z. B. "Sheet1, Abschnitte A, B" bereitzustellen.

Siehe auch

Weitere Ressourcen

Technische Hinweise durch Zahl

Technische Hinweise nach Kategorie