Aracılığıyla paylaş


Yazdır İletişim Kutusu

Yazdır iletişim kutusu, kullanıcının belirli bir yazdırma işi için seçenekleri belirlemesine olanak tanır. Örneğin, kullanıcı kullanılacak yazıcıyı, yazdırılacak sayfa aralığını ve kopya sayısını belirtebilir.

PrintDlgEx işlevini, Genel sekmesine sahip, Yazdır iletişim kutusuna benzer denetimler içeren bir Yazdırma Özellik Sayfasıgörüntülemek için kullanabilirsiniz. Özellik sayfasında, Genel sayfasından sonra uygulamaya özgü ve sürücüye özgü ek özellik sayfaları da bulunabilir.

PRINTDLG yapısını başlatıp yapıyı PrintDlg işlevine geçirerek bir Yazdırma iletişim kutusunu oluşturur ve görüntülersiniz.

Aşağıdaki çizimde tipik bir Yazdır iletişim kutusu gösterilmektedir.

yazdırma iletişim kutusu

Kullanıcı Tamam düğmesine tıklarsa, PrintDlgTRUE döndürür ve kullanıcının seçimleri hakkındaki bilgileri döndürmek için PRINTDLGyapısını kullanır. Örneğin, hDevMode ve hDevNames üyeleri, ve DEVNAMES yapıları için genellikle genel bellek tanıtıcıları döndürür. Seçili yazıcı için bir cihaz bağlamı veya bilgi bağlamı oluşturmak için bu yapılardaki bilgileri kullanabilirsiniz.

Kullanıcı Yazdır iletişim kutusunu iptal ederse veya bir hata oluşursa, PrintDlgFALSE döndürür. Genişletilmiş hata değerini almak için CommDlgExtendedError işlevini kullanarak hatanın nedenini belirleyebilirsiniz.

Yazdır iletişim kutusu, kullanıcının tüm sayfaları mı, bir sayfa aralığını mı yoksa yalnızca seçili metni mi yazdırmak istediğini gösteren bir Yazdırma Aralığı radyo düğmeleri grubu içerir. printDlgçağırmadan önce, başlangıçta hangi düğmenin seçildiğini belirtmek için PD_ALLPAGES, PD_SELECTIONveya PD_PAGENUMS bayraklarından birini ayarlayabilirsiniz. PrintDlg true döndürdüğünde, işlev kullanıcının seçimlerini göstermek için bu bayraklardan birini ayarlar. PD_PAGENUMS ayarlanırsa, nFromPage ve nToPagePRINTDLG yapısının üyeleri, kullanıcı tarafından belirtilen başlangıç ve bitiş sayfalarını içerir. Sayfaları radyo düğmesini ve ilişkili From ve düzenleme denetimlerini devre dışı bırakmak için PD_NOPAGENUMS bayrağını ayarlayın. Seçimi radyo düğmesini devre dışı bırakmak için PD_NOSELECTION bayrağını ayarlayın.

İletişim kutusu, kullanıcının yazdırılacak kopya sayısını yazabileceği bir düzenleme denetimi içerir. PRINTDLG yapısının hDevMode üyesiNULLdeğilse, yapının dmCopies üyesi bu düzenleme denetiminin ilk değerini belirtir. hDevMode NULL ise, PRINTDLG yapısının üyesi nCopies ilk değeri belirtir. PrintDlg döndürdüğünde, nCopies genellikle kullanıcı tarafından belirtilen kopya sayısını gösterir. Ancak, iletişim kutusunu oluştururken PD_USEDEVMODECOPIESANDCOLLATE bayrağını ayarlarsanız, nCopies her zaman dönüşte 1 olarak ayarlanır ve dmCopies üyesi DEVMODE yazdırılacak kopya sayısını gösterir.

Harmanla onay kutusu, birden çok kopya yazdırılıyorsa kullanıcının sayfaları harmanlama isteğinde bulunup bulunmadığı gösterir. PD_COLLATE bayrağı, Harmanla onay kutusu seçildiğinde ayarlanır. Uygulamanız birden çok kopyayı veya simülasyon harmanlamayı desteklemiyorsa, PRINTDLG yapısının Flags üyesindeki PD_USEDEVMODECOPIESANDCOLLATE bayrağını ayarlayın. Bu, yazıcı sürücüsü birden çok kopyayı ve harmanlamayı desteklemediği sürece Harmanla onay kutusunu ve Kopya Sayısı düzenleme denetimini devre dışı bırakır.

Dosyaya Yazdır onay kutusu, kullanıcının çıktıyı yazıcı yerine bir dosyaya göndermek isteyip istemediğini gösterir. onay kutusunun başlangıçta seçili olması için PD_PRINTTOFILE bayrağını ayarlayabilirsiniz. Onay kutusunu gizlemek için PD_HIDEPRINTTOFILE bayrağını ayarlayın. Devre dışı bırakmak için PD_DISABLEPRINTTOFILE bayrağını ayarlayın. Kullanıcı Dosyaya Yazdır seçeneğini belirlerse, PrintDlgPD_PRINTTOFILE bayrağını ayarlar ve DEVNAMES yapısının wOutputOffset üyesi tarafından belirtilen uzaklıkta "FILE:" döndürür. Yazdırma işlemini başlatmak için işlevini çağırdığınızda, yapının lpszOutput üyesinde bu "FILE:" dizesini belirtin. Bu dizenin belirtilmesi, yazdırma alt sisteminin kullanıcıyı çıkış dosyasının adını sorgulamasına neden olur.

Varsayılan olarak, Yazdır iletişim kutusu başlangıçta geçerli varsayılan yazıcı hakkındaki bilgileri görüntüler. Başka bir yüklü yazıcının bilgilerini görüntülemek için, bir DEVNAMES yapısı başlatın ve genel bellek tutamacını bu yapıya atayıp, hDevMode ve hDevNames üyelerine tanımlayın. DEVMODE yapısındaki dmDeviceName ve DEVNAMES yapısındaki wDriverOffset üyesinde belirttiğiniz cihaz adı, Win.ini dosyasının [Devices] bölümünde de yer alan bir yazıcı cihazını tanımlamalıdır. Cihaz listelenmiyorsa PrintDlgbir hata döndürür.

PrintDLGPRINTDLG yapısının üyesi Bayrakları'nda PD_RETURNDC veya PD_RETURNIC bayrağını ayarlayarak yazıcı için cihaz bağlamı veya bilgi bağlamı oluşturmaya yönlendirebilirsiniz. İşlev, hDC üyesinde aygıt bağlamına veya bilgi bağlamına bir tanıtıcı döndürür. PD_RETURNDC bayrağını kullanırsanız, yazıcı için çıkış oluşturmak için cihaz bağlamını kullanabilirsiniz.

Yazdır iletişim kutusunu görüntülemeden varsayılan yazıcı hakkındaki bilgileri almak için PD_RETURNDEFAULT bayrağını ayarlayın. Bu durumda, PrintDlg, hDevMode ayarlandıktan hemen sonra döndürülür ve bilgileri içeren yapıları işlemek üzere hDevNames üyelerini.

Varsayılan olarak, PrintDlg hata oluştuğunda ileti kutularını görüntüler. Örneğin, hiçbir yazıcı yüklü değilse işlev bir hata iletisi görüntüler. İşlevin bu uyarı iletilerini görüntülemesini önlemek için PD_NOWARNING bayrağını ayarlayın.

Bu bölümde aşağıdaki konular ele alınıyor.

Yazdır İletişim Kutusunu Özelleştirme

Yazdır iletişim kutusu için özel bir şablon sağlayabilirsiniz. Örneğin, uygulamanıza özgü ek denetimler eklemek isteyebilirsiniz. PrintDlg işlevi, varsayılan şablon yerine özel şablonunuzu kullanır.

Yazdır iletişim kutusu için özel bir şablon sağlamak için:

  1. Prnsetup.dlg dosyasında belirtilen varsayılan şablonu değiştirerek özel şablonu oluşturun. Varsayılan Yazdır iletişim kutusu şablonunda kullanılan denetim tanımlayıcıları Dlgs.h dosyasında tanımlanır.
  2. Şablonu etkinleştirmek için PRINTDLG yapısını aşağıdaki gibi kullanın:
    • Özel şablonunuz bir uygulama veya dinamik bağlantı kitaplığındaki bir kaynaksa, Bayraklar üyesinde PD_ENABLEPRINTTEMPLATE bayrağını ayarlayın. modülü ve kaynak adını tanımlamak için hInstance ve lpPrintTemplateName yapı üyelerini kullanın.

      -Veya-

    • Özel şablonunuz zaten bellekteyse PD_ENABLEPRINTTEMPLATEHANDLE bayrağını ayarlayın. Şablonu içeren bellek nesnesini tanımlamak için hPrintTemplate üyesini kullanın.

Yazdır iletişim kutusu için PrintHookProc kanca yordamı sağlayabilirsiniz. Kanca prosedürü, iletişim kutusuna gönderilen iletileri işleyebilir. ayrıca iletişim kutusuna ileti gönderebilir. Ek denetimler tanımlamak için özel bir şablon kullanıyorsanız, denetimlerinizin girişini işlemek için bir kanca yordamı sağlamanız gerekir.

Yazdır iletişim kutusu için bir kanca işlevini etkinleştirme:

  1. PRINTDLG yapısının Bayrakları üyesinde PD_ENABLEPRINTHOOK bayrağını ayarlayın.
  2. lpfnPrintHook yapısındaki kanca yordamının adresini belirtin.

WM_INITDIALOG iletisini işledikten sonra, iletişim kutusu yordamı kanca yordamına bir WM_INITDIALOG iletisi gönderir. Bu iletinin lParam parametresi, iletişim kutusunu başlatmak için kullanılan PRINTDLG yapısının işaretçisidir.

PrintDlg işlevine yapılan çağrıda PD_PRINTSETUP bayrağını ayarlayarak Yazdırma Kurulumu iletişim kutusu oluşturabilir ve görüntüleyebilirsiniz. Ancak, Yazdırma Kurulumu iletişim kutusunun yerini Sayfa Yapısı iletişim kutusu almıştır ve yeni uygulamalarda kullanılmamalıdır.

Aşağıdaki bayraklar yalnızca Yazdırma Kurulumu iletişim kutusu için geçerlidir:

  • PD_ENABLESETUPHOOK
  • PD_ENABLESETUPTEMPLATE
  • PD_ENABLESETUPTEMPLATEHANDLE