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.Článek obsahuje následující témata:
Tisk protokolu
Potlačení zobrazení funkcí třídy
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 interakci rámec a zobrazit následujícím způsobem.Nejprve rámci, zobrazí Tisk dialogové okno vytváří kontext zařízení pro tiskárnu a volání StartDoc členské funkce CDC objektu.Potom pro každou stránku dokumentu rámci volání Uvodni_stranka členské funkce CDC objekt, nastaví objekt zobrazení pro tisk stránky a volání EndPage členské funkce.Pokud je nutné změnit režim tiskárny před zahájením určité stránky, zobrazení volá ResetDC, které aktualizace DEVMODE struktura obsahující informace o režimu nové tiskárny.Při tisku celého dokumentu rámci volání EndDoc členské funkce.
Potlačení zobrazení funkcí třídy
CView třída definuje několik členské funkce, které jsou volány rámci během tisku.Přepsáním těchto funkcí v zobrazení třídy poskytují připojení mezi rámci tisku logiku a logiku tisku třídy zobrazení.Následující tabulka uvádí tyto funkce členů.
CView's Overridable funkce pro tisk
Název |
Důvod pro potlačení |
---|---|
Vložit hodnoty v dialogovém okně Tisk, zejména délku dokumentu |
|
Přidělit písma nebo jiných zdrojů GDI |
|
Upravit atributy kontextu zařízení pro danou stránku nebo provádět stránkování čas tisku |
|
Tisk na dané stránce |
|
Chcete-li navrátit zdrojů GDI |
Můžete provést také další funkce související s tiskem zpracování, ale tyto funkce jsou ty, které jednotka proces tisku.
Následující obrázek znázorňuje kroky v procesu tisku a ukazuje, kde každý z CViewpro tisk členů, které se nazývají funkce.Zbývající část tohoto článku se vysvětluje většinu takto podrobněji.Další části procesu tisku jsou popsány v článku Přidělování zdrojů GDI.
Opakovat tisk
Stránkování
Rámci ukládá většinu informací o tiskové úloze v CPrintInfo struktury.Několik hodnot v CPrintInfo se týkají stránkování; Tyto hodnoty jsou přístupné podle následující tabulky.
Číslo stránky informace uložené v CPrintInfo
Členské proměnné nebo jméno funkce |
Odkazované číslo stránky |
---|---|
GetMinPage/SetMinPage |
První stránka dokumentu |
GetMaxPage/SetMaxPage |
Poslední stránka dokumentu |
GetFromPage |
První tisknuté stránky |
GetToPage |
Poslední tisknuté stránky |
m_nCurPage |
Právě tištěné stránky |
Čísla počáteční stránky 1, je první stránka je číslovány není 0, 1.Další informace o těchto a dalších členů CPrintInfo, najdete MFC odkaz.
Na začátku procesu tisku volá rámci v zobrazení OnPreparePrinting předávání ukazatel na funkci členu CPrintInfo struktury.Průvodce aplikací poskytuje implementaci OnPreparePrinting , který volá DoPreparePrinting, jiné členské funkce CView.DoPreparePrintingje funkce, která se zobrazí v dialogovém okně Tisk a vytvoří kontext zařízení tiskárny.
V tomto okamžiku aplikace neví, kolik stránek se v dokumentu.Použije 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 do DoPreparePrinting.Zde můžete zadat délku dokumentu.
DoPreparePrintingpoté se zobrazí dialogové okno Tisk.Když se vrátí, CPrintInfo struktury obsahuje hodnoty zadané uživatelem.Pokud uživatel chce vytisknout pouze vybranou oblast stránky, chce 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 nemá určete rozsah stránek, volá rozhraní GetMinPage a GetMaxPage a používá hodnoty vrácené celý dokument vytisknout.
Pro každou stránku dokumentu k tisku rámci volání funkce dvou členů ve své třídě zobrazení OnPrepareDC a Při tiskua předá každé funkci dva parametry: ukazatel na CDC objektu a ukazatel na CPrintInfo struktury.Při každém volání framework OnPrepareDC a OnPrint, předá jinou hodnotu v m_nCurPage člena CPrintInfo struktury.Tímto způsobem informuje rámci zobrazení, stránky, které mají být vytištěny.
OnPrepareDC členské funkce se také používá pro zobrazení na obrazovce.Před uplatněním výkresu usnadňuje úpravy kontext zařízení.OnPrepareDCpodobnou roli slouží v tisku, ale existuje několik rozdílů: první, CDC kontext zařízení tiskárny namísto obrazovky kontext zařízení a druhý představuje objekt 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 provést úpravy, která stránka se tiskne na základě kontextu zařízení.Můžete například přesunout výchozí bod a oblast oříznutí zajistit, aby příslušné části 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á rozhraní OnDraw s kontextem zařízení tiskárna tisk provést.Přesněji, volání v rámci OnPrint se CPrintInfo struktury a kontext zařízení a OnPrint předává kontext zařízení k OnDraw.Přepsat OnPrint provádět veškeré vykreslování, musí být provedeno pouze při tisku a není pro zobrazení na obrazovce.Například vytisknout v záhlaví nebo zápatí (viz článek záhlaví a zápatí Další informace).Potom voláním OnDraw z vyřazení z OnPrint vykreslování, které jsou společné pro obě zobrazení a tisk.
Skutečnost, OnDraw nemá vykreslování pro obě obrazovky, zobrazení a tisk znamená, že aplikace je WYSIWYG: "viz co je můžete získat. Předpokládejme však, že nejsou psaní WYSIWYG aplikace.Například zvažte textový editor, který použije tučné písmo pro tisk, ale zobrazí kódy označující tučného textu na obrazovce.V takové situaci použijte OnDraw výhradně pro zobrazení na obrazovce.Když potlačíte OnPrint, nahradit volání OnDraw s volání samostatné funkce kreslení.Funkce nakreslí dokumentu způsob, jakým se zobrazí na papír pomocí atributů, které nechcete zobrazit na obrazovce.
Vs stránky tiskárny.Stránky dokumentu
Při odkazu na čísla stránek je někdy nutné rozlišovat mezi pojmu stránka tiskárny 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.Tisknete-li bulletin, kde jsou listy přeložena, může obsahovat jeden list papíru například první a poslední stránka dokumentu vedle sebe.Podobně pokud tisknete tabulky, dokument není skládat stránek vůbec.Jeden list papíru, může obsahovat řádky 1 až 20 sloupce 6 až 10.
Na stránce čísel v CPrintInfo struktury odkazují na stránky tiskárny.Volání rámci OnPrepareDC a OnPrint jednou pro každý list papíru, který tiskárna projdou.Pokud nepřevedete OnPreparePrinting funkce určit délku dokumentu, musíte použít stránky tiskárny.Pokud přímé korespondence (jedné stránky tiskárny, 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, musí překládat mezi nimi.Zvažte například Tisk tabulky.Při přepsání OnPreparePrinting, je nutné vypočítat, kolik listů papíru, bude nutné vytisknout celou tabulku a potom tuto hodnotu použít při volání SetMaxPage členské funkce CPrintInfo.Podobně při přepsání OnPrepareDC, musíte přeložit m_nCurPage do oblasti řádků a sloupců, které se na tento konkrétní list a odpovídajícím způsobem upravit výchozí bod.
Čas tisku stránkování
V některých situacích třídy zobrazení pravděpodobně není předem vědět jak dlouho je dokument, 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ůsobuje potíže při OnPreparePrinting pro zobrazení třídy: hodnotu nelze předat SetMaxPage funkce CPrintInfo struktury, protože nevíte, délka dokumentu.Pokud uživatel nemá číslo stránky při použití dialogového okna Tisk, neví rámci při zastavení tisku smyčky.Jediný způsob, jak určit, kdy přestane opakovat tisk je vytisknout dokument a při jeho ukončení.Zobrazení třídy vyhledat konec dokumentu, zatímco je tištěn a poté informuje rámci při dosažení konce.
Rámci závisí na vaší třídy zobrazení OnPrepareDC funkce můžete určit, kdy bude ukončeno.Po každé volání OnPrepareDC, rámci kontroly členem CPrintInfo struktury se nazývá m_bContinuePrinting.Výchozí hodnota je hodnotu TRUE. Jak dlouho zůstane tak pokračuje v rámci tisku smyčky.Pokud je nastaven na FALSE, framework přestane.Přepsat provést stránkování čas tisku, OnPrepareDC zkontrolujte, zda konci dokumentu byla dosažena a nastavit m_bContinuePrinting na FALSE po.
Výchozí implementace OnPrepareDC nastaví m_bContinuePrinting na FALSE Pokud aktuální stránky je větší než 1.To znamená, že pokud délka dokument nebyl zadán, rámci předpokládá, že dokument je dlouhý jednu stránku.Důsledkem toho to je, že musí být opatrní při volání třídy základní verzi OnPrepareDC.Nelze předpokládat, m_bContinuePrinting bude TRUE po volání verze základní třídy.