Aracılığıyla paylaş


Çok sayfalı belgeleri

Bu makalede Windows yazdırma iletişim kuralı ve birden fazla sayfa içeren belgeleri yazdırmak açıklar.Bu makale aşağıdaki konuları kapsar:

  • Yazdırma iletişim kuralı

  • Görüntüleme sınıfı işlevleri geçersiz kılma

  • Sayfalandırma

  • Yazıcı sayfa vs.Belge sayfaları

  • Sayfalandırma baskı zamanı

Yazdırma iletişim kuralı

Çok sayfalı bir belgeyi yazdırmak için aşağıdaki şekilde framework ve Görünüm etkileşim.İlk çerçeve görüntüler baskı iletişim kutusunda, yazıcı ve aramalar için aygıt içeriği oluşturur StartDoc üye işlevi hdm nesnesi.Daha sonra belgeyi her sayfa için framework çağırır StartPage üye işlevi CDC nesnesi, sayfa ve çağrıları yazdırmak için view nesnesi bildirir EndPage üye işlevi.Yazıcı modu, belirli bir sayfa başlamadan önce değiştirilmeli, görünümü çağıran ResetDC, hangi güncelleştirmeleri devmode yeni yazıcı mod bilgilerini içeren bir yapı.Tüm belge yazdırıldığında framework çağıran EndDoc üye işlevi.

Görüntüleme sınıfı işlevleri geçersiz kılma

CView sınıfı, yazdırma sırasında çerçevesi tarafından çağırılan birkaç üye işlevleri tanımlar.Bu işlevler, görünüm sınıfındaki geçersiz kılarak, framework'ün yazdırma mantığı ve yazdırma görünümü sınıfının mantığı arasındaki bağlantılar sağlar.Aşağıdaki tabloda, bu üye işlevleri listeler.

CView'ın geçersiz kılınabilir işlevleri için yazdırma

Ad

Nedeni geçersiz kılma

OnPreparePrinting

Yazdır iletişim kutusunda, özellikle belge uzunluğunu değerlerini eklemek için

OnBeginPrinting

Yazı tiplerini veya diğer GDI kaynakları ayrılamadı.

OnPrepareDC

Belirli bir sayfa için aygıt içeriği özniteliklerini ayarlamak için veya yazdırma saati sayfalama yapmak için

Yazdırma

Belirli bir sayfa yazdırmak için

OnEndPrinting

GDI kaynakları serbest bırakmak için

Yazdırma ile ilgili diğer işlevleri işleme yapabilirsiniz, ancak bu işlevler yazdırma işlemi sürücü olanlardır.

Aşağıdaki şekil, yazdırma işleminde yer alan adımları göstermektedir ve yeri gösterir her CViewüye işlevleri olarak bilgisayarın yazdırma.Bu makalenin geri kalanında çoğu daha ayrıntılı adımları açıklar.Ek bölümleri yazdırma işleminin makalesinde açıklanan GDI kaynakları tahsis etme.

Yazdırma döngü

Döngü yordamı yazdırma

Sayfalandırma

Framework çok yazdırma işi hakkında bilgi depolayan bir CPrintInfo yapısı.Değerlerin bazılarını CPrintInfo için sayfalandırma; ilgilidir. Bu değerler aşağıdaki tabloda gösterildiği gibi erişilebilir.

CPrintInfo içinde depolanan sayfa numarası bilgileri

Üye değişkeni veya

işlev adı

Başvurulan sayfa numarası

GetMinPage/SetMinPage

Belgenin ilk sayfası

GetMaxPage/SetMaxPage

Belgenin son sayfasına

GetFromPage

Yazdırılacak ilk sayfayı

GetToPage

Yazdırılacak son sayfayı

m_nCurPage

Yazdırılmakta olan sayfa

1, Sayfa numaralarını başlangıcında, ilk sayfa numaralandırılmıştır 1, değilse 0.Bunlar ve diğer üyeleri hakkında daha fazla bilgi için CPrintInfo, bakın mfc başvuru.

Yazdırma işleminin başında framework görünümün çağıran OnPreparePrinting üye işlevini gösteren bir işaretçi bir CPrintInfo yapısı.Uygulama Sihirbazı uygulaması sağlar OnPreparePrinting , çağrı DoPreparePrinting, başka bir üye işlev, CView.DoPreparePrintingYazdır iletişim kutusunu görüntüler ve yazıcı aygıt içeriğini oluşturur işlevdir.

Bu noktada uygulama kaç sayfa belge içinde olduğunuzu değildir.Belgenin ilk ve son sayfa numaraları 1 ile 0xFFFF varsayılan değerleri kullanır.Kaç sayfası belgeniz olduğunu biliyorsanız, geçersiz kılma OnPreparePrinting ve SetMaxPage için CPrintInfo için göndermeden önce yapı DoPreparePrinting.Bu belgenin uzunluğunu belirlemenize olanak verir.

DoPreparePrintingDaha sonra Yazdır iletişim kutusunu görüntüler.Döndüğünde, CPrintInfo yapısı kullanıcı tarafından belirtilen değerleri içerir.Kullanıcı, yalnızca seçilen aralıktaki sayfaları yazdırmak isterse izinli başlangıç ve bitiş Yazdır iletişim kutusundaki sayfa numaralarını belirtebilirsiniz.Framework kullanarak bu değerleri alır GetFromPage ve GetToPage işlevlerini CPrintInfo.Kullanıcı bir sayfa aralığı belirtmiyorsa, framework çağıran GetMinPage ve GetMaxPage ve tüm belgeyi yazdırmak için döndürülen değerleri kullanır.

Belgenin yazdırılacak her sayfa için Görünüm sınıfınızda framework iki üye işlevi çağırır OnPrepareDC ve OnPrintve her işlevi iki parametre geçirir: bir işaretçi bir hdm nesnesi ve bir işaretçi bir CPrintInfo yapısı.Framework aramalar her zaman OnPrepareDC ve OnPrint, farklı bir deðeri aktarýr m_nCurPage üyesi CPrintInfo yapısı.Bu şekilde, hangi sayfanın yazdırılacağı görünümü framework söyler.

OnPrepareDC üye işlev ekran görüntüsü için de kullanılır.Çizim işlemi gerçekleşmeden önce aygıt içeriğini ayarlamaları yapar.OnPrepareDCbenzer bir rolü, baskı gören ancak birkaç farklılıklar vardır: ilk, CDC nesnesi gösteren bir yazıcı aygıt içeriğini ekran aygıt içeriğini ve ikinci, yerine bir CPrintInfo nesne ikinci parametre olarak geçirilen.(Bu parametre null , OnPrepareDC için ekran görüntüsü olarak adlandırılır.) Geçersiz kılma OnPrepareDC hangi sayfa yazdırılıyor temel aygıt içeriğini ayarlamalar yapmak için.Örneğin, Görünüm penceresi kaynak ve belgeyi uygun bölümü yazdırılmaz sağlamak için kırpma bölgesini taşıyabilirsiniz.

OnPrint üye işlevi sayfanın yazdırma gerçekleştirir.Makale Nasıl varsayılan yazdırma yapılır framework nasıl çağırır gösterir OnDraw baskı yapmak için bir yazıcı aygıt içeriği ile.Daha hassas bir şekilde framework çağrıları OnPrint ile bir CPrintInfo yapısı ve bir aygıt içeriğini ve OnPrint için aygıt içeriği ileten OnDraw.Geçersiz kılma OnPrint yalnızca yazdırma sırasında ve ekran görüntüsü için yapılması herhangi bir işleme gerçekleştirmek için.Örneğin, üstbilgi veya altbilgi yazdırma (makalesine bakın üstbilgiler ve altbilgiler daha fazla bilgi için).Sonra arama OnDraw geçersiz kılma'den OnPrint ortak hem ekran görüntüsü oluşturma ve yazdırma yapmak için.

Gerçeği, OnDraw işleme hem de ekran görüntüleme ve yazdırma anlamına gelir WYSIWYG uygulamanız olduğunu mu: "bakın ne görürsen." Ancak, WYSIWYG uygulama yazma olmayan varsayalım.Örneğin, bir metin düzenleyicisi, kalın yazı tipi yazdırma için kullanan, ancak kalın metin ekranda göstermek üzere Denetim kodlarını görüntüler düşünün.Böyle bir durumda kullandığınız OnDraw ekran görüntüsü için kesinlikle.Ne zaman geçersiz kılma OnPrint, çağrı yerine OnDraw ayrı bir çizim işlevine çağrı ile.Bu işlev, belge ekranda görüntüleme özniteliklerini kullanarak kağıda görüntülenme şeklini çizer.

Yazıcı sayfa vs.Belge sayfaları

Sayfa numaraları için başvurduğunuzda, yazıcının sayfa kavramı ve belgenin sayfa kavramını ayırt bazen gereklidir.Bakı açısıyla yazıcı, tek bir kağıda bir sayfa var.Ancak, tek bir kağıda bir sayfa belge mutlaka eşit değildir.Örneğin, sayfaları katlanmak yaratılacağı, bülten yazdırıyorsanız tek bir kağıda ilk ve son sayfalar belgenin yan yana içerebilir.Elektronik yazdırıyorsanız, benzer şekilde, belge sayfalarında hiç oluşur değildir.Bunun yerine, tek bir kağıda satır 1'den 20, 6 ile 10 arasındaki sütunlar içerebilir.

Sayfa numaraları CPrintInfo yapısı yazıcı sayfalarına bakın.Framework çağrıları OnPrepareDC ve OnPrint her kağıda yazıcı geçmesi için bir kez.Ne zaman geçersiz kılma OnPreparePrinting belge uzunluğunu belirtmek için işlev, yazıcının sayfaları kullanmanız gerekir.Bire bir benzerliği ise (yani, bir yazıcı sayfası bir belge sayfası eşittir), sonra da kolay.Diğer taraftan, belge sayfaları ve yazıcının sayfaları doğrudan karşılık gelmeyen, aralarında çevirmesi gerekir.Örneğin, bir elektronik tablo yazdırma düşünün.Geçersiz kılarken OnPreparePrinting, kaç sayfa kağıt tüm elektronik tabloyu yazdırmak ve bu değer ararken kullanmak üzere gerekli hesaplamalısınız SetMaxPage üye işlevi CPrintInfo.Benzer şekilde, geçersiz kılarken OnPrepareDC, çevirmesi gerekir m_nCurPage içine aralığın satır ve sütun belirli bir sayfada görünmesini ve Görünüm penceresi kaynak'ı buna göre ayarlayın.

Sayfalandırma baskı zamanı

Bazı durumlarda, görünüm sınıfınızın önceden gerçekten yazdırıldığını kadar ne kadar süreyle belgedir bilmeyebilir.Uygulamanızın WYSIWYG değildir varsayalım, böylece ekrandaki bir belgenin uzunluğu yazdırıldığında uzunluğunu gelmiyor.

Geçersiz, bu soruna neden OnPreparePrinting görünüm sınıfınız için: bir değer geçirilemez SetMaxPage işlevini CPrintInfo bir belge uzunluğunu bilmiyorum çünkü yapı.Kullanıcı Yazdır iletişim kutusunu kullanarak durdurmak için sayfa numarası belirtmiyorsa, framework yazdırma Döngüyü durdurmak ne zaman bilmek değildir.Yazdırma Döngüyü durdurmak ne zaman belirlemek için yalnızca belgeyi yazdırmak ve bittiği zaman görmek için yoludur.Görünüm sınıfınızın, yazdırılmakta olan ve sonuna ulaşıldığında framework hakkında bilgilendirmek için belgenin sonuna denetlemeniz gerekir.

Görünüm sınıfınızın çerçevesi kullanır OnPrepareDC bunu söylemek için işlevini durdurmak ne zaman.Her arama sonra OnPrepareDC, üye framework denetler CPrintInfo adı verilen yapı m_bContinuePrinting.Varsayılan değer olan doğru. Bunu kaldığı sürece, çerçeve yazdırma döngü devam eder.Bu ayarlanırsa, yanlış, framework durur.Yazdırma saati sayfalandırma gerçekleştirmek için geçersiz kılma OnPrepareDC belgenin sonuna ulaşıldı, set ve olup olmadığını denetlemek için m_bContinuePrinting için yanlış zaman vardır.

Varsayılan uygulama olarak OnPrepareDC ayarlar m_bContinuePrinting için yanlış geçerli sayfa 1'den büyükse.Başka bir deyişle, belge uzunluğunu belirtilen değildi, çerçeve belge uzun bir sayfa olduğunu varsayar.Bunun bir sonucu olduğu, temel sınıf sürümü çağırırsanız dikkatli olması gerektiğini OnPrepareDC.Yaptığınızı varsayar değil m_bContinuePrinting olacak doğru temel sınıf sürümü çağrıldıktan sonra.

w7wzay73.collapse_all(tr-tr,VS.110).gifHangi konu hakkında daha fazla bilgi edinmek istiyorsunuz?

Ayrıca bkz.

Başvuru

Yazdırma

CView sınıfı

CDC Sınıfı