Sdílet prostřednictvím


CPrintDialog Třída

Zapouzdřuje služby poskytované běžným dialogovým oknem Windows pro tisk.

Syntaxe

class CPrintDialog : public CCommonDialog

Členové

Veřejné konstruktory

Název Popis
CPrintDialog::CPrintDialog CPrintDialog Vytvoří objekt.

Veřejné metody

Název Popis
CPrintDialog::CreatePrinterDC Vytvoří kontext zařízení tiskárny bez zobrazení dialogového okna Tisk.
CPrintDialog::DoModal Zobrazí dialogové okno a umožní uživateli provést výběr.
CPrintDialog::GetCopies Načte požadovaný počet kopií.
CPrintDialog::GetDefaults Načte výchozí hodnoty zařízení bez zobrazení dialogového okna.
CPrintDialog::GetDeviceName Načte název aktuálně vybraného zařízení tiskárny.
CPrintDialog::GetDevMode Načte DEVMODE strukturu.
CPrintDialog::GetDriverName Načte název aktuálně vybraného ovladače tiskárny.
CPrintDialog::GetFromPage Načte počáteční stránku rozsahu tisku.
CPrintDialog::GetPortName Načte název aktuálně vybraného portu tiskárny.
CPrintDialog::GetPrinterDC Načte popisovač kontextu zařízení tiskárny.
CPrintDialog::GetToPage Načte koncovou stránku rozsahu tisku.
CPrintDialog::PrintAll Určuje, zda se mají vytisknout všechny stránky dokumentu.
CPrintDialog::PrintCollate Určuje, zda jsou požadovány kompletované kopie.
CPrintDialog::PrintRange Určuje, zda se má vytisknout pouze zadaný rozsah stránek.
CPrintDialog::PrintSelection Určuje, zda se mají vytisknout pouze aktuálně vybrané položky.

Veřejné datové členy

Název Popis
CPrintDialog::m_pd Struktura použitá k přizpůsobení objektu CPrintDialog .

Poznámky

Běžná dialogová okna pro tisk poskytují snadný způsob, jak implementovat dialogová okna Nastavení tisku a tisku způsobem konzistentním se standardy Windows.

Poznámka:

Třída CPrintDialogEx zapouzdřuje služby poskytované seznamem vlastností Tisk systému Windows. Další informace najdete v přehledu CPrintDialogEx .

CPrintDialogFunkce je nahrazena funkcí , CPageSetupDialogkterá je navržena tak, aby vám poskytovala společné dialogové okno pro nastavení tisku i vzhled stránky.

Při zpracování mnoha aspektů procesu tisku pro vaši aplikaci můžete spoléhat na architekturu. V tomto případě architektura automaticky zobrazí společné dialogové okno systému Windows pro tisk. Můžete mít také rozhraní popisovač tisku pro vaši aplikaci, ale přepsat společné dialogové okno Tisk pomocí vlastního dialogového okna tisku. Další informace o použití architektury pro zpracování úloh tisku naleznete v článku Tisk.

Pokud chcete, aby vaše aplikace zpracovávala tisk bez zapojení architektury, můžete použít CPrintDialog třídu "tak, jak je" se zadaným konstruktorem, nebo můžete odvodit vlastní třídu dialogového okna a CPrintDialog napsat konstruktor tak, aby vyhovoval vašim potřebám. V obou případech se tato dialogová okna budou chovat jako standardní dialogová okna MFC, protože jsou odvozeny z třídy CCommonDialog.

Chcete-li použít CPrintDialog objekt, nejprve vytvořte objekt pomocí konstruktoru CPrintDialog . Po vytvoření dialogového okna můžete nastavit nebo upravit jakékoli hodnoty ve m_pd struktuře a inicializovat hodnoty ovládacích prvků dialogového okna. Struktura m_pd je typu PRINTDLG. Další informace o této struktuře najdete v sadě Windows SDK.

Pokud nezadáte vlastní popisovače m_pd pro hDevMode členy a hDevNames členy, nezapomeňte při práci s dialogovým oknem volat funkci GlobalFree Windows pro tyto popisovače. Pokud používáte implementaci nastavení tisku architektury, kterou CWinApp::OnFilePrintSetupposkytuje , nemusíte tyto popisovače uvolnit. Popisovače jsou udržovány CWinApp a jsou uvolněny v CWinAppdestruktoru. Tyto úchyty je nutné uvolnit pouze při použití CPrintDialog samostatného.

Po inicializaci ovládacích prvků dialogového okna zavolejte DoModal členovou funkci, aby zobrazila dialogové okno a povolila uživateli vybrat možnosti tisku. DoModal vrátí, zda uživatel vybral tlačítko OK (IDOK) nebo Zrušit (IDCANCEL).

Pokud DoModal se vrátí IDOK, můžete použít některou z CPrintDialogčlenských funkcí k načtení vstupu informací uživatelem.

Členová CPrintDialog::GetDefaults funkce je užitečná pro načtení výchozích hodnot aktuální tiskárny bez zobrazení dialogového okna. Tato členová funkce nevyžaduje žádnou interakci uživatele.

Pomocí funkce Systému Windows CommDlgExtendedError můžete určit, jestli během inicializace dialogového okna došlo k chybě, a získat další informace o chybě. Další informace o této funkci najdete v sadě Windows SDK.

CPrintDialog spoléhá na COMMDLG.DLL soubor, který je dodáván s Windows verze 3.1 a novější.

Chcete-li přizpůsobit dialogové okno, odvodit třídu z CPrintDialog, poskytnout vlastní šablonu dialogového okna a přidat mapu zpráv pro zpracování zpráv z rozšířených ovládacích prvků. Všechny nezpracované zprávy by měly být předány do základní třídy. Přizpůsobení funkce háku se nevyžaduje.

Chcete-li zpracovat stejnou zprávu odlišně v závislosti na tom, zda je dialogové okno Tisk nebo Tiskové nastavení, je nutné odvodit třídu pro každé dialogové okno. Musíte také přepsat funkci Systému Windows AttachOnSetup , která zpracovává vytvoření nového dialogového okna, když je v dialogovém okně Tisk vybráno tlačítko Vzhled tisku.

Další informace o použití CPrintDialognaleznete v tématu Běžné třídy dialogových oken.

Hierarchie dědičnosti

CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

CPrintDialog

Požadavky

Záhlaví: afxdlgs.h

CPrintDialog::CPrintDialog

Vytvoří buď objekt dialogového okna Tisk nebo Tisk instalačního okna systému Windows.

CPrintDialog(
    BOOL bPrintSetupOnly,
    DWORD dwFlags = PD_ALLPAGES | PD_USEDEVMODECOPIES | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE | PD_NOSELECTION,
    CWnd* pParentWnd = NULL);

Parametry

bPrintSetupOnly
Určuje, zda se zobrazí standardní dialogové okno Tisk systému Windows nebo Dialogové okno Nastavení tisku. Nastavte tento parametr tak, aby TRUE se zobrazilo standardní dialogové okno Instalační program tisku systému Windows. Nastavte ho tak, aby FALSE se zobrazilo dialogové okno Tisk ve Windows. Pokud bPrintSetupOnly je FALSEtato možnost, v dialogovém okně Tisk se stále zobrazuje tlačítko Možnosti Nastavení tisku.

dwFlags
Jeden nebo více příznaků, které můžete použít k přizpůsobení nastavení dialogového okna v kombinaci pomocí bitové operátoru OR. Příznak například PD_ALLPAGES nastaví výchozí rozsah tisku na všechny stránky dokumentu. PRINTDLG Další informace o těchto příznakech najdete ve struktuře v sadě Windows SDK.

pParentWnd
Ukazatel na nadřazené okno nebo okno vlastníka dialogového okna

Poznámky

Tato členová funkce vytvoří pouze objekt. DoModal Pomocí členské funkce zobrazte dialogové okno.

Všimněte si, že při volání konstruktoru s bPrintSetupOnly nastavenou na FALSE, PD_RETURNDC příznak se automaticky použije. Po volání DoModal, GetDefaultsnebo GetPrinterDC, tiskárna DC bude vrácena v m_pd.hDC. Tento řadič domény musí být uvolněn voláním DeleteDC volajícího CPrintDialog.

Příklad

// Display the Windows Print dialog box with "All" radio button 
// initially selected. All other radio buttons are disabled.
CPrintDialog dlg1(FALSE);

// Display the Windows Print dialog box with Collate check box checked.  
CPrintDialog dlg2(FALSE, PD_ALLPAGES | PD_COLLATE | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE);

// Display the Windows Print dialog box with "Selection" radio
// button initially selected. "All" radio button is enabled
// but "Pages" radio button is disabled.
CPrintDialog dlg3(FALSE, PD_SELECTION | PD_USEDEVMODECOPIES);

CPrintDialog::CreatePrinterDC

Vytvoří kontext zařízení tiskárny (DC) ze DEVMODE struktur a DEVNAMES struktur.

HDC CreatePrinterDC();

Návratová hodnota

Umožňuje zpracovat nově vytvořený kontext zařízení tiskárny.

Poznámky

Tento řadič domény se předpokládá jako aktuální řadič domény tiskárny a všechny ostatní dříve získané řadiče domény tiskárny musí uživatel odstranit. Tuto funkci lze volat a výsledný řadič domény se používá bez zobrazení dialogového okna Tisk.

Příklad

// Display the Windows Print dialog box with "All" radio button 
// initially selected. All other radio buttons are disabled.
CPrintDialog dlg(FALSE);
if (dlg.DoModal() == IDOK)
{
   // Create a printer device context (DC) based on the information
   // selected from the Print dialog.
   HDC hdc = dlg.CreatePrinterDC();
   ASSERT(hdc);
}

CPrintDialog::DoModal

Zobrazí společné tiskové dialogové okno systému Windows a umožňuje uživateli vybrat různé možnosti tisku, jako je počet kopií, rozsah stránek a zda mají být kopie kompletovány.

virtual INT_PTR DoModal();

Návratová hodnota

IDOK nebo IDCANCEL. Pokud IDCANCEL je vrácena, zavolejte funkci Systému Windows CommDlgExtendedError , abyste zjistili, zda došlo k chybě.

IDOK a IDCANCEL jsou konstanty, které označují, jestli uživatel vybral tlačítko OK nebo Zrušit .

Poznámky

Pokud chcete inicializovat různé možnosti dialogového okna tisku nastavením členů m_pd struktury, měli byste to udělat před voláním DoModal, ale po vytvoření objektu dialogového okna.

Po volání můžete zavolat DoModaldalší členské funkce, které načtou nastavení nebo informace zadané uživatelem do dialogového okna.

Všimněte si, že při volání konstruktoru s bPrintSetupOnly nastavenou na FALSE, PD_RETURNDC příznak se automaticky použije. Po volání DoModal, GetDefaultsnebo GetPrinterDC, tiskárna DC bude vrácena v m_pd.hDC. Tento řadič domény musí být uvolněn voláním DeleteDC volajícího CPrintDialog.

Příklad

Podívejte se na příklad pro CPrintDialog::CreatePrinterDC.

CPrintDialog::GetCopies

Načte požadovaný počet kopií.

int GetCopies() const;

Návratová hodnota

Počet požadovaných kopií.

Poznámky

Voláním této funkce načtěte DoModal požadovaný počet kopií.

Příklad

Podívejte se na příklad pro CPrintDialog::PrintCollate.

CPrintDialog::GetDefaults

Načte výchozí nastavení zařízení výchozí tiskárny bez zobrazení dialogového okna.

BOOL GetDefaults();

Návratová hodnota

Nenulové, pokud byla funkce úspěšná; jinak 0.

Poznámky

Načtené hodnoty jsou umístěny ve struktuře m_pd .

V některých případech volání této funkce zavolá konstruktor s CPrintDialog bPrintSetupOnly nastavenou na FALSEhodnotu . V těchto případech se automaticky přidělí řadič domény tiskárny a hDevNames hDevMode (dva úchyty umístěné v datovém členu m_pd ).

Pokud byl konstruktor pro CPrintDialog volána s nastavenou bPrintSetupOnly na FALSE, tato funkce se nevrátí hDevNames a nachází pouze v m_pd.hDevNames a m_pd.hDevModehDevMode ) volajícímu, ale vrátí také tiskárnu DC v m_pd.hDC. Je zodpovědností volajícího odstranit řadič domény tiskárny a volat funkci Windows GlobalFree na popisovačích, jakmile s objektem CPrintDialog skončíte.

Příklad

Tento fragment kódu získá kontext zařízení výchozí tiskárny a oznamuje uživateli rozlišení tiskárny v tečkách na palec. (Tento atribut schopností tiskárny se často označuje jako DPI.)

CPrintDialog dlg(FALSE);

if (!dlg.GetDefaults())
{
   AfxMessageBox(_T("You have no default printer!"));
}
else
{
   // attach to the DC we were given
   CDC dc;
   dc.Attach(dlg.m_pd.hDC);

   // ask for the measurements
   int nHorz = dc.GetDeviceCaps(LOGPIXELSX);
   int nVert = dc.GetDeviceCaps(LOGPIXELSY);

   // almost always the same in both directions, but sometimes not!
   CString str;
   if (nHorz == nVert)
   {
      str.Format(_T("Your printer supports %d pixels per inch"), nHorz);
   }
   else
   {
      str.Format(_T("Your printer supports %d pixels per inch ")
         _T("horizontal resolution, and %d pixels per inch vertical ")
         _T("resolution"), nHorz, nVert);
   }

   // tell the user
   AfxMessageBox(str);

   // Note: no need to call Detach() because we want the CDC destructor
   // to call FreeDC() on the DC we borrowed from the common dialog
}

CPrintDialog::GetDeviceName

Načte název aktuálně vybraného zařízení tiskárny.

CString GetDeviceName() const;

Návratová hodnota

Název aktuálně vybrané tiskárny.

Poznámky

Volání této funkce po volání DoModal načíst název aktuálně vybrané tiskárny nebo po volání GetDefaults načíst aktuální výchozí nastavení zařízení výchozí tiskárny. Použijte ukazatel na CString objekt vrácený GetDeviceName jako hodnotu lpszDeviceName ve volání CDC::CreateDC.

Příklad

Tento fragment kódu zobrazuje výchozí název tiskárny uživatele a port, ke kterému je připojený, spolu s názvem zařazování, který tiskárna používá. Kód může zobrazit okno se zprávou "Výchozí tiskárna je HP LaserJet IIIP na \\server\share pomocí winspoolu", například.

CPrintDialog dlg(FALSE);

if (!dlg.GetDefaults())
{
   AfxMessageBox(_T("You have no default printer!"));
}
else
{
   CString strDescription;

   strDescription.Format(_T("Your default printer is %s on %s using %s."),
      (LPCTSTR)dlg.GetDeviceName(),
      (LPCTSTR)dlg.GetPortName(),
      (LPCTSTR)dlg.GetDriverName());

   AfxMessageBox(strDescription);
}

CPrintDialog::GetDevMode

Načte DEVMODE strukturu.

LPDEVMODE GetDevMode() const;

Návratová hodnota

Datová DEVMODE struktura, která obsahuje informace o inicializaci zařízení a prostředí ovladače tisku. Paměť pořízenou touto strukturou musíte odemknout pomocí funkce Systému Windows GlobalUnlock , která je popsaná v sadě Windows SDK.

Poznámky

Volání této funkce po volání DoModal nebo GetDefaults načtení informací o tiskovém zařízení.

Příklad

Podívejte se na příklad pro CPrintDialog::PrintCollate.

CPrintDialog::GetDriverName

Načte název aktuálně vybraného ovladače tiskárny.

CString GetDriverName() const;

Návratová hodnota

Zadejte CString název ovladače definovaného systémem.

Poznámky

Volejte tuto funkci po volání DoModal nebo GetDefaults načtení názvu ovladače zařízení tiskárny definovaného systémem. Použijte ukazatel na CString objekt vrácený GetDriverName jako hodnotu lpszDriverName ve volání CDC::CreateDC.

Příklad

Podívejte se na příklad pro CPrintDialog::GetDeviceName.

CPrintDialog::GetFromPage

Načte počáteční stránku rozsahu tisku.

int GetFromPage() const;

Návratová hodnota

Počáteční číslo stránky v rozsahu stránek, které se mají vytisknout.

Poznámky

Voláním této funkce načtěte DoModal počáteční číslo stránky v rozsahu stránek, který se má vytisknout.

Příklad

Podívejte se na příklad pro CPrintDialog::m_pd.

CPrintDialog::GetPortName

Načte název aktuálně vybraného portu tiskárny.

CString GetPortName() const;

Návratová hodnota

Název aktuálně vybraného portu tiskárny.

Poznámky

Volání této funkce po volání DoModal nebo GetDefaults načtení názvu aktuálně vybraného portu tiskárny.

Příklad

Podívejte se na příklad pro CPrintDialog::GetDeviceName.

CPrintDialog::GetPrinterDC

Načte popisovač kontextu zařízení tiskárny.

HDC GetPrinterDC() const;

Návratová hodnota

Popisovač kontextu zařízení tiskárny v případě úspěchu; jinak NULL.

Poznámky

bPrintSetupOnly Pokud byl FALSE parametr konstruktoru CPrintDialog (indikující, že se zobrazí dialogové okno Tisk), GetPrinterDC vrátí popisovač kontextu zařízení tiskárny. Až budete hotovi, musíte funkci Windows DeleteDC volat, abyste odstranili kontext zařízení.

Příklad

CPrintDialog dlg(FALSE);
CPrintDialog dlg(FALSE);
if (dlg.DoModal() == IDOK)
{
   // Get a handle to the printer device context (DC).
   HDC hdc = dlg.GetPrinterDC();
   ASSERT(hdc);

   // Do something with the HDC...

   // Clean up.
   CDC::FromHandle(hdc)->DeleteDC();
}

CPrintDialog::GetToPage

Načte koncovou stránku rozsahu tisku.

int GetToPage() const;

Návratová hodnota

Koncové číslo stránky v rozsahu stránek, které se mají vytisknout.

Poznámky

Voláním této funkce načtěte DoModal koncové číslo stránky v rozsahu stránek, který se má vytisknout.

Příklad

Podívejte se na příklad pro CPrintDialog::m_pd.

CPrintDialog::m_pd

Struktura, jejíž členové ukládají charakteristiky objektu dialogového okna.

PRINTDLG& m_pd;

Poznámky

Po vytvoření objektu CPrintDialog můžete před voláním DoModal členské funkce nastavit m_pd různé aspekty dialogového okna. Další informace o struktuře m_pd najdete PRINTDLG v sadě Windows SDK.

Pokud datový člen upravíte m_pd přímo, přepíšete výchozí chování.

Příklad

// Display the Windows Print dialog box with "Pages" radio button
// initially selected. "All" and "Pages" radio buttons are
// enabled as well.
CPrintDialog dlg(FALSE, PD_PAGENUMS | PD_USEDEVMODECOPIES);
dlg.m_pd.nMinPage = dlg.m_pd.nFromPage = 1;
dlg.m_pd.nMaxPage = dlg.m_pd.nToPage = 10;
if (dlg.DoModal() == IDOK)
{
   // Determine the starting and ending page numbers for the range 
   // of pages to be printed.

   int from_page = -1, to_page = -1;
   if (dlg.PrintAll())              // print all pages in the document
   {
      from_page = dlg.m_pd.nMinPage;
      to_page = dlg.m_pd.nMaxPage;
   }
   else if (dlg.PrintRange())       // print only a range of pages 
   {                                // in the document 
      from_page = dlg.GetFromPage();
      to_page = dlg.GetToPage();
   }
   else if (dlg.PrintSelection())   // print only the currently selected 
                                    // items
   {
      from_page = to_page = -1;     // -1 to denote unknown yet
   }

   TRACE(_T("Print from %d to %d\n"), from_page, to_page);
}

CPrintDialog::PrintAll

Určuje, zda se mají vytisknout všechny stránky dokumentu.

BOOL PrintAll() const;

Návratová hodnota

Nenulové, pokud budou vytištěny všechny stránky v dokumentu; jinak 0.

Poznámky

Zavoláním této funkce DoModal určíte, jestli se mají vytisknout všechny stránky v dokumentu.

Příklad

Podívejte se na příklad pro CPrintDialog::m_pd.

CPrintDialog::PrintCollate

Určuje, zda jsou požadovány kompletované kopie.

BOOL PrintCollate() const;

Návratová hodnota

Nenulové, pokud uživatel zaškrtne políčko sbalit v dialogovém okně; jinak 0.

Poznámky

Voláním této funkce DoModal určíte, zda má tiskárna kompletovat všechny vytištěné kopie dokumentu.

Příklad

// Display the Windows Print dialog box with Collate check box checked.
CPrintDialog dlg(FALSE, PD_ALLPAGES | PD_COLLATE | PD_NOPAGENUMS |
   PD_HIDEPRINTTOFILE);
if (dlg.DoModal() == IDOK)
{
   // If the collate check box is selected, then GetCopies() will return
   // the number of copies printed. Otherwise, GetCopies() always 
   // returns 1. Then, the number of copies printed can be found from the
   // DEVMODE structure of the printing device.
   if (dlg.PrintCollate())
   {
      int num = dlg.GetCopies();
      TRACE(_T("Number of copies printed = %d\n"), num);
   }
   else
   {
      LPDEVMODE devmode = dlg.GetDevMode();
      TRACE(_T("Number of copies printed = %d\n"), devmode->dmCopies);
   }
}

CPrintDialog::PrintRange

Určuje, zda se má vytisknout pouze zadaný rozsah stránek.

BOOL PrintRange() const;

Návratová hodnota

Nenulové, pokud se má vytisknout pouze rozsah stránek v dokumentu; jinak 0.

Poznámky

Zavoláním této funkce DoModal určíte, jestli se má vytisknout jenom rozsah stránek v dokumentu.

Příklad

Podívejte se na příklad pro CPrintDialog::m_pd.

CPrintDialog::PrintSelection

Určuje, zda se mají vytisknout pouze aktuálně vybrané položky.

BOOL PrintSelection() const;

Návratová hodnota

Nenulové, pokud budou vytištěny pouze vybrané položky; jinak 0.

Poznámky

Voláním této funkce DoModal určíte, zda se mají vytisknout pouze aktuálně vybrané položky.

Příklad

Podívejte se na příklad pro CPrintDialog::m_pd.

Viz také

Mfc – ukázka DIBLOOK
CCommonDialog Třída
Graf hierarchie
CPrintInfo Struktura