Vícestránkové dokumenty
Tento článek popisuje protokol tisku systému Windows a vysvětluje, jak tisknout dokumenty, které obsahují více než jednu stránku.Tento článek obsahuje následující témata:
Tisk protokolu
Přepsání funkce třídy zobrazení
Stránkování
Vs stránky tiskárny. stránky dokumentu
Čas tisku stránkování
Tisk protokolu
Chcete-li vytisknout vícestránkový dokument, framework a zobrazení vzájemně následujícím způsobem.Nejprve zobrazí rámci Tisk dialogové okno, vytvoří kontext zařízení pro tiskárnu a volání zobrazující členské funkce CSP objektu.Potom pro každou stránku dokumentu volá architektura StartPage členské funkce CDC objekt, nastaví objekt zobrazení pro tisk stránky a volání EndPage členské funkce.Je-li třeba změnit režim tiskárny před zahájením konkrétní stránky, zobrazení volá ResetDC, které aktualizace DEVMODE struktura obsahující nové informace o režimu tiskárny.Když byl vytištěn celý dokument, je architekturou zavolána EndDoc členské funkce.
Přepsání funkce třídy zobrazení
CView třída definuje několik členské funkce, které se nazývají rámcem při tisku.Přepsáním těchto funkcí v zobrazení třídy je poskytnout připojení mezi v rámci tisku logiku a logiku tisku zobrazení třídy.V následující tabulce jsou uvedeny tyto členské funkce.
Jeho CView Overridable funkce pro tisk
Name |
Důvod pro přepsání |
---|---|
Vložit hodnoty v dialogovém okně Tisk, zejména délku dokumentu |
|
Přidělit písma nebo jiných zdrojů GDI |
|
Chcete-li upravit atributy kontextu zařízení pro danou stránku nebo provádět stránkování čas tisku |
|
Chcete-li vytisknout určité stránky |
|
Chcete-li navrátit zdrojů GDI |
Můžete tiskové zpracování i další funkce, ale tyto funkce jsou ty, které proces tisku.
Následující obrázek znázorňuje kroky v procesu tisku a ukazuje, kde každý z CViewna tisk členské funkce se nazývají.Zbývající část tohoto článku se vysvětluje většinu takto podrobněji.Další částí procesu tisku jsou popsány v článku Přidělování zdrojů GDI.
Opakovat tisk
Stránkování
Rámci ukládá převážně informace o tiskové úloze v CPrintInfo struktury.Několik hodnot v CPrintInfo se týkají stránkování; Tyto hodnoty jsou k dispozici, jak je znázorněno v následující tabulce.
Číslo stránky informace uložené v CPrintInfo
Členské proměnné nebo jméno funkce |
Číslo stránky se odkazuje |
---|---|
GetMinPage/SetMinPage |
První stránky dokumentu |
GetMaxPage/SetMaxPage |
Poslední stránku dokumentu |
GetFromPage |
První tisknuté stránky |
GetToPage |
Poslední tisknuté stránky |
m_nCurPage |
Právě tištěné stránky |
Start čísla stránky na 1, první stránky je číslovaný není 0, 1.Další informace o těchto a dalších členů CPrintInfo, naleznete Odkaz knihovny MFC.
Na začátku procesu tisku, volá architektura v zobrazení OnPreparePrinting členské funkce, předáte ukazatel CPrintInfo struktury.Průvodce aplikace poskytuje implementaci OnPreparePrinting , který volá DoPreparePrinting, jiné členské funkce CView.DoPreparePrintingje funkce, která zobrazí dialogové okno Tisk a vytvoří kontextu zařízení tiskárny.
V tomto okamžiku aplikace neví, kolik stránek se v dokumentu.Používá výchozí hodnoty 1 a 0xFFFF čísla první a poslední stránku dokumentu.Pokud víte, kolik stránek dokumentu má přepsat OnPreparePrinting a SetMaxPage pro CPrintInfo struktury před jejím odesláním DoPreparePrinting.To vám umožní určit délku dokumentu.
DoPreparePrintingpoté se zobrazí dialogové okno Tisk.Když se vrátí, CPrintInfo struktura obsahuje hodnoty zadané uživatelem.Pokud uživatel chce vytisknout pouze vybrané oblasti stránky, mu můžete zadat počáteční a koncová čísla stránek v dialogovém okně Tisk.Rámci načte tyto hodnoty pomocí GetFromPage a GetToPage funkce CPrintInfo.Pokud uživatel není zadejte rozsah stránek, architektura volá GetMinPage a GetMaxPage a používá hodnoty vrácené vytisknout celý dokument.
Pro každou stránku dokumentu k tisku architektura volá dvě členské funkce v zobrazení třídy, OnPrepareDC a při tiskua předává každou funkci dva parametry: ukazatel CSP objekt a ukazatel CPrintInfo struktury.Pokaždé, když architektura volá OnPrepareDC a OnPrint, předá jinou hodnotu v m_nCurPage člen CPrintInfo struktury.Tímto způsobem rámci říká zobrazení stránky, která má být vytištěna.
OnPrepareDC členské funkce se také používá pro zobrazení na obrazovce.Před uplatněním výkresu usnadňuje úpravy kontextu zařízení.OnPrepareDChraje podobnou roli v tisku, ale existuje několik rozdílů: první, CDC objekt představuje kontext zařízení tiskárna kontext zařízení obrazovky a druhý, CPrintInfo objekt je předán jako druhý parametr. (Tento parametr je NULL při OnPrepareDC je volána pro zobrazení na obrazovce.) Přepsat OnPrepareDC k provedení úprav v kontextu zařízení založené na stránku, která se právě tiskne.Můžete například přesunout bod zobrazení a oblast oříznutí pro zajištění, že příslušnou část dokument vytištěn.
Při tisku členské funkce provádí skutečný tisk stránky.V článku Jak výchozí tisk se provádí ukazuje, jak volá architektura OnDraw s kontextu zařízení tiskárny provést tisk.Přesněji řečeno, systém volá OnPrint se CPrintInfo struktury a kontextu zařízení, a OnPrint předává kontext zařízení k OnDraw.Přepsat OnPrint provádět jakékoliv vykreslení, které by mělo být provedeno pouze při tisku a není pro zobrazení na obrazovce.Chcete-li například vytisknout v záhlaví nebo zápatí (naleznete v článku záhlaví a zápatí pro další informace).Volejte OnDraw z přepsané OnPrint vykreslování, které jsou společné pro obě zobrazení a tisk.
Skutečnost, OnDraw se vykreslování pro obě obrazovky, zobrazení a tisk znamená, že aplikace je WYSIWYG: "What you see is what you get." Však Předpokládejme, že nejsou psaní WYSIWYG aplikace.Příkladem je textový editor, který použije tučné písmo pro tisk, ale zobrazí řídicí kódy označující tučný text na obrazovce.V takové situaci použijete OnDraw výhradně pro zobrazení na obrazovce.Při přepsání OnPrint, nahradit volání OnDraw s voláním do samostatné funkce výkresu.Tato funkce nakreslí dokumentu způsobem, který se objeví na papír pomocí atributů, které nechcete zobrazit na obrazovce.
Vs stránky tiskárny. Stránky dokumentu
Jestliže odkazujete na čísla stránek, je někdy nutné rozlišovat pojem tiskárny stránky a koncept dokumentu na stránce.Z hlediska tiskárny je na stránce jeden list papíru.Jeden list papíru však není nutně rovnat jedné stránky dokumentu.Například pokud tisknete bulletin, kde listy mají být přeloženy, může obsahovat jeden list papíru první a poslední stránka dokumentu, vedle sebe.Podobně při tisku tabulky, dokument nebude obsahovat stránky vůbec.Místo toho jeden list papíru může obsahovat řádky 1 až 20, sloupce 6 až 10.
Všechny stránky v čísla CPrintInfo struktura odkazují na stránky tiskárny.Architektura volá OnPrepareDC a OnPrint jednou pro každý list papíru, který bude procházet tiskárny.Při přepsání OnPreparePrinting k určení délky dokumentu fungovat, je nutné použít stránky tiskárny.Při vztahu 1: 1 (to znamená, že jedné stránky tiskárny se rovná jedné stránky dokumentu), pak je to snadné.Pokud na druhé straně dokumentu stránky a stránky tiskárny neodpovídají přímo, je třeba převést mezi nimi.Zvažte například Tisk tabulky.Při přepsání OnPreparePrinting, je nutné vypočítat, kolik listů papíru, budete muset vytisknout celou tabulku a potom tuto hodnotu použít při volání SetMaxPage členské funkce CPrintInfo.Podobně při přepsání OnPrepareDC, je třeba převést m_nCurPage do oblasti řádků a sloupců, které se zobrazí na této konkrétní listu a odpovídajícím způsobem upravit bod zobrazení.
Čas tisku stránkování
V některých situacích zobrazení třídy nesmějí předem vědět, jak dlouho je v dokumentu, dokud skutečně byla vytištěna.Například předpokládejme, že aplikace není WYSIWYG, takže délka dokumentu na obrazovce neodpovídá jeho délka při tisku.
To způsobí potíže při potlačení OnPreparePrinting pro svou třídu zobrazení: nemůžete předat žádnou hodnotu pro SetMaxPage funkce CPrintInfo struktury, protože neznáte délku dokumentu.Pokud uživatel neurčuje číslo stránky při použití dialogového okna Tisk, rámci neví, kdy bude ukončeno tisku smyčky.Jediný způsob, jak určit, kdy k zastavení tisku smyčky je dokument vytiskněte a při jeho ukončení.Zobrazení třídy vyhledat na konec dokumentu, když je tištěn a pak informovat rozhraní, pokud je dosaženo konce.
Rozhraní framework spoléhá na třídu zobrazení OnPrepareDC funkce mu sdělit, kdy bude ukončeno.Po každé volání OnPrepareDC, rámci kontroly členem CPrintInfo strukturu s názvem m_bContinuePrinting.Jeho výchozí hodnota je TRUE. Tak dlouho, dokud zůstává tak, pokračuje v rámci tisku smyčky.Pokud je nastavena na FALSE, framework přestane.Provádět stránkování čas tisku potlačit OnPrepareDC Chcete-li zkontrolovat, zda konci dokumentu byla dosaženo a nastavit m_bContinuePrinting k FALSE po.
Výchozí implementace OnPrepareDC nastaví m_bContinuePrinting k FALSE je-li aktuální stránky je větší než 1.To znamená, že pokud nebyla zadána délka dokumentu, rámci předpokládá, že dokument je dlouhý jednu stránku.Důsledkem tohoto je, že musíte být opatrní při volání základní třídy verzi OnPrepareDC.Nepředpokládejte, že m_bContinuePrinting bude TRUE po volání verze základní třídy.