Udostępnij za pośrednictwem


CPrintDialog Klasa

Hermetyzuje usługi udostępniane przez wspólne okno dialogowe systemu Windows do drukowania.

Składnia

class CPrintDialog : public CCommonDialog

Elementy członkowskie

Konstruktory publiczne

Nazwa/nazwisko opis
CPrintDialog::CPrintDialog CPrintDialog Tworzy obiekt.

Metody publiczne

Nazwa/nazwisko opis
CPrintDialog::CreatePrinterDC Tworzy kontekst urządzenia drukarki bez wyświetlania okna dialogowego Drukowanie.
CPrintDialog::DoModal Wyświetla okno dialogowe i umożliwia użytkownikowi dokonanie wyboru.
CPrintDialog::GetCopies Pobiera żądaną liczbę kopii.
CPrintDialog::GetDefaults Pobiera wartości domyślne urządzenia bez wyświetlania okna dialogowego.
CPrintDialog::GetDeviceName Pobiera nazwę aktualnie wybranego urządzenia drukarki.
CPrintDialog::GetDevMode DEVMODE Pobiera strukturę.
CPrintDialog::GetDriverName Pobiera nazwę aktualnie wybranego sterownika drukarki.
CPrintDialog::GetFromPage Pobiera stronę początkową zakresu wydruku.
CPrintDialog::GetPortName Pobiera nazwę aktualnie wybranego portu drukarki.
CPrintDialog::GetPrinterDC Pobiera uchwyt do kontekstu urządzenia drukarki.
CPrintDialog::GetToPage Pobiera stronę końcową zakresu wydruku.
CPrintDialog::PrintAll Określa, czy mają być drukowane wszystkie strony dokumentu.
CPrintDialog::PrintCollate Określa, czy są żądane sortowanie kopii.
CPrintDialog::PrintRange Określa, czy wyświetlać tylko określony zakres stron.
CPrintDialog::PrintSelection Określa, czy mają być drukowane tylko aktualnie wybrane elementy.

Publiczne elementy członkowskie danych

Nazwa/nazwisko opis
CPrintDialog::m_pd Struktura używana do dostosowywania CPrintDialog obiektu.

Uwagi

Typowe okna dialogowe drukowania umożliwiają łatwe implementowanie okien dialogowych Ustawienia drukowania i drukowania w sposób zgodny ze standardami systemu Windows.

Uwaga

Klasa CPrintDialogEx hermetyzuje usługi udostępniane przez arkusz właściwości Windows Print. Aby uzyskać więcej informacji, zobacz CPrintDialogEx omówienie.

CPrintDialogFunkcjonalność jest zastępowana przez CPageSetupDialogfunkcję , która została zaprojektowana w celu zapewnienia wspólnego okna dialogowego zarówno dla konfiguracji wydruku, jak i konfiguracji strony.

Możesz polegać na strukturze do obsługi wielu aspektów procesu drukowania dla aplikacji. W takim przypadku platforma automatycznie wyświetla typowe okno dialogowe systemu Windows do drukowania. Możesz również mieć platformę do obsługi drukowania dla aplikacji, ale zastąpić wspólne okno dialogowe Drukowanie własnym okno dialogowe drukowania. Aby uzyskać więcej informacji na temat używania platformy do obsługi zadań drukowania, zobacz artykuł Drukowanie.

Jeśli chcesz, aby aplikacja obsługiwała drukowanie bez udziału platformy, możesz użyć CPrintDialog klasy "as is" z podanym konstruktorem lub utworzyć własną klasę okna dialogowego z CPrintDialog klasy i napisać konstruktor zgodnie z potrzebami. W obu przypadkach te okna dialogowe będą zachowywać się jak standardowe okna dialogowe MFC, ponieważ pochodzą one z klasy CCommonDialog.

Aby użyć CPrintDialog obiektu, najpierw utwórz obiekt przy użyciu konstruktora CPrintDialog . Po utworzeniu okna dialogowego można ustawić lub zmodyfikować dowolne wartości w m_pd strukturze, aby zainicjować wartości kontrolek okna dialogowego. Struktura m_pd jest typu PRINTDLG. Aby uzyskać więcej informacji na temat tej struktury, zobacz Zestaw WINDOWS SDK.

Jeśli nie podasz własnych uchwytów m_pd dla hDevMode elementów i hDevNames , pamiętaj, aby wywołać funkcję GlobalFree systemu Windows dla tych dojść po zakończeniu pracy z okna dialogowego. W przypadku korzystania z implementacji instalatora wydruku platformy dostarczonej przez CWinApp::OnFilePrintSetupprogram nie trzeba zwalniać tych dojść. Uchwyty są obsługiwane przez CWinApp i są zwalniane w CWinAppdestruktora 's. Należy zwolnić te dojścia tylko w przypadku korzystania z CPrintDialog autonomicznego.

Po zainicjowaniu kontrolek okna dialogowego wywołaj DoModal funkcję składową, aby wyświetlić okno dialogowe i zezwolić użytkownikowi na wybieranie opcji drukowania. DoModal Zwraca, czy użytkownik wybrał przycisk OK (IDOK) lub Anuluj (IDCANCEL).

Jeśli DoModal funkcja zwraca IDOKwartość , możesz użyć jednej z CPrintDialogfunkcji członkowskich, aby pobrać informacje wejściowe przez użytkownika.

Funkcja CPrintDialog::GetDefaults składowa jest przydatna do pobierania bieżących ustawień domyślnych drukarki bez wyświetlania okna dialogowego. Ta funkcja składowa nie wymaga interakcji użytkownika.

Za pomocą funkcji systemu Windows CommDlgExtendedError można określić, czy wystąpił błąd podczas inicjowania okna dialogowego i dowiedzieć się więcej o błędzie. Aby uzyskać więcej informacji na temat tej funkcji, zobacz Zestaw Windows SDK.

CPrintDialog korzysta z pliku dostarczanego COMMDLG.DLL z systemem Windows w wersji 3.1 lub nowszej.

Aby dostosować okno dialogowe, utwórz klasę z CPrintDialogklasy , podaj niestandardowy szablon okna dialogowego i dodaj mapę komunikatów w celu przetworzenia komunikatów powiadomień z rozszerzonych kontrolek. Wszystkie nieprzetworzone komunikaty powinny być przekazywane do klasy bazowej. Dostosowywanie funkcji haka nie jest wymagane.

Aby przetworzyć ten sam komunikat w różny sposób w zależności od tego, czy okno dialogowe to Print or Print Setup, należy utworzyć klasę dla każdego okna dialogowego. Należy również zastąpić funkcję systemu Windows AttachOnSetup , która obsługuje tworzenie nowego okna dialogowego po wybraniu przycisku Ustawienia drukowania w oknie dialogowym Drukowanie.

Aby uzyskać więcej informacji na temat korzystania z programu CPrintDialog, zobacz Typowe klasy okien dialogowych.

Hierarchia dziedziczenia

CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

CPrintDialog

Wymagania

Nagłówek: afxdlgs.h

CPrintDialog::CPrintDialog

Tworzy obiekt okna dialogowego Print lub Print Setup.

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

Parametry

bPrintSetupOnly
Określa, czy jest wyświetlane standardowe okno dialogowe Drukowania systemu Windows lub Okno dialogowe Ustawienia wydruku. Ustaw ten parametr na wartość , aby wyświetlić TRUE standardowe okno dialogowe Ustawienia drukowania systemu Windows. Ustaw go na wartość , aby FALSE wyświetlić okno dialogowe Drukowanie systemu Windows. Jeśli bPrintSetupOnly jest FALSEto , przycisk Opcji Ustawienia wydruku jest nadal wyświetlany w oknie dialogowym Drukowanie.

dwFlags
Co najmniej jedna flaga, której można użyć do dostosowania ustawień okna dialogowego, połączonego za pomocą operatora bitowego OR. Na przykład flaga PD_ALLPAGES ustawia domyślny zakres wydruku na wszystkie strony dokumentu. PRINTDLG Aby uzyskać więcej informacji na temat tych flag, zobacz strukturę zestawu Windows SDK.

pParentWnd
Wskaźnik do okna nadrzędnego lub okna właściciela okna dialogowego.

Uwagi

Ta funkcja składowa konstruuje tylko obiekt . Użyj funkcji składowej DoModal , aby wyświetlić okno dialogowe.

Należy pamiętać, że podczas wywoływania konstruktora z ustawioną bPrintSetupOnly wartością FALSEflaga PD_RETURNDC jest używana automatycznie. Po wywołaniu metody DoModal, GetDefaultslub GetPrinterDCkontroler domeny drukarki zostanie zwrócony w .m_pd.hDC Ten kontroler domeny musi zostać zwolniony za pomocą wywołania DeleteDC przez obiekt wywołujący .CPrintDialog

Przykład

// 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

Tworzy kontekst urządzenia drukarki (DC) na podstawie DEVMODE struktur i DEVNAMES .

HDC CreatePrinterDC();

Wartość zwracana

Dojmij do nowo utworzonego kontekstu urządzenia drukarki.

Uwagi

Ten kontroler domeny przyjmuje się, że jest bieżącym kontrolerem domeny drukarki, a wszystkie inne wcześniej uzyskane kontrolery domeny drukarki muszą zostać usunięte przez użytkownika. Tę funkcję można wywołać, a wynikowy kontroler domeny jest używany bez wyświetlania okna dialogowego Drukowanie.

Przykład

// 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

Wyświetla typowe okno dialogowe drukowania systemu Windows i umożliwia użytkownikowi wybranie różnych opcji drukowania, takich jak liczba kopii, zakres stron i czy kopie powinny być sortowane.

virtual INT_PTR DoModal();

Wartość zwracana

Usługa IDOK lub IDCANCEL. Jeśli IDCANCEL jest zwracana, wywołaj funkcję systemu Windows CommDlgExtendedError , aby określić, czy wystąpił błąd.

IDOK i IDCANCEL są stałymi, które wskazują, czy użytkownik wybrał przycisk OK , czy Anuluj .

Uwagi

Jeśli chcesz zainicjować różne opcje okna dialogowego drukowania, ustawiając elementy członkowskie m_pd struktury, należy to zrobić przed wywołaniem DoModalmetody , ale po utworzeniu obiektu okna dialogowego.

Po wywołaniu DoModalmetody można wywołać inne funkcje członkowskie, aby pobrać ustawienia lub informacje wejściowe przez użytkownika w oknie dialogowym.

Należy pamiętać, że podczas wywoływania konstruktora z ustawioną bPrintSetupOnly wartością FALSEflaga PD_RETURNDC jest używana automatycznie. Po wywołaniu metody DoModal, GetDefaultslub GetPrinterDCkontroler domeny drukarki zostanie zwrócony w .m_pd.hDC Ten kontroler domeny musi zostać zwolniony za pomocą wywołania DeleteDC przez obiekt wywołujący .CPrintDialog

Przykład

Zobacz przykład dla elementu CPrintDialog::CreatePrinterDC.

CPrintDialog::GetCopies

Pobiera żądaną liczbę kopii.

int GetCopies() const;

Wartość zwracana

Liczba żądanych kopii.

Uwagi

Wywołaj tę funkcję po wywołaniu metody DoModal , aby pobrać żądaną liczbę kopii.

Przykład

Zobacz przykład dla elementu CPrintDialog::PrintCollate.

CPrintDialog::GetDefaults

Pobiera domyślne ustawienia drukarki domyślnej urządzenia bez wyświetlania okna dialogowego.

BOOL GetDefaults();

Wartość zwracana

Nonzero, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie 0.

Uwagi

Pobrane wartości są umieszczane w m_pd strukturze.

W niektórych przypadkach wywołanie tej funkcji wywoła konstruktor dla parametru z ustawioną wartością FALSEbPrintSetupOnly .CPrintDialog W takich przypadkach kontroler domeny drukarki i hDevNames hDevMode (dwa uchwyty znajdujące się w elemencie m_pd danych) są automatycznie przydzielane.

Jeśli konstruktor dla CPrintDialog elementu został wywołany z ustawioną wartością FALSEbPrintSetupOnly , ta funkcja nie będzie zwracać hDevNames ani hDevMode znajdować się w m_pd.hDevNames elementach i m_pd.hDevMode) do elementu wywołującego, ale również zwróci kontroler domeny drukarki w systemie m_pd.hDC. Obowiązkiem obiektu wywołującego jest usunięcie kontrolera domeny drukarki i wywołanie funkcji systemu Windows GlobalFree na uchwytach po zakończeniu pracy z obiektem CPrintDialog .

Przykład

Ten fragment kodu pobiera domyślny kontekst urządzenia drukarki i raportuje użytkownikowi rozdzielczość drukarki w kropkach na cal. (Ten atrybut możliwości drukarki jest często określany 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

Pobiera nazwę aktualnie wybranego urządzenia drukarki.

CString GetDeviceName() const;

Wartość zwracana

Nazwa aktualnie wybranej drukarki.

Uwagi

Wywołaj tę funkcję po wywołaniu metody DoModal , aby pobrać nazwę aktualnie wybranej drukarki lub po wywołaniu metody GetDefaults w celu pobrania bieżących ustawień domyślnych drukarki domyślnej urządzenia. Użyj wskaźnika do CString obiektu zwróconego przez GetDeviceName wartość lpszDeviceName w wywołaniu metody CDC::CreateDC.

Przykład

Ten fragment kodu przedstawia domyślną nazwę drukarki użytkownika i port, z który jest połączony, wraz z nazwą buforu używaną przez drukarkę. Kod może wyświetlić okno komunikatu z komunikatem "Domyślna drukarka to HP LaserJet IIIP w \\server\share przy użyciu puli winspool"., na przykład.

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

DEVMODE Pobiera strukturę.

LPDEVMODE GetDevMode() const;

Wartość zwracana

Struktura DEVMODE danych zawierająca informacje o inicjowaniu urządzenia i środowisku sterownika wydruku. Należy odblokować pamięć pobraną przez tę strukturę za pomocą funkcji systemu Windows GlobalUnlock , która została opisana w zestawie WINDOWS SDK.

Uwagi

Wywołaj tę funkcję po wywołaniu DoModal lub GetDefaults pobrać informacje o urządzeniu do drukowania.

Przykład

Zobacz przykład dla elementu CPrintDialog::PrintCollate.

CPrintDialog::GetDriverName

Pobiera nazwę aktualnie wybranego sterownika drukarki.

CString GetDriverName() const;

Wartość zwracana

Określenie CString nazwy sterownika zdefiniowanego przez system.

Uwagi

Wywołaj tę funkcję po wywołaniu DoModal metody lub GetDefaults pobierz nazwę sterownika urządzenia drukarki zdefiniowanej przez system. Użyj wskaźnika do CString obiektu zwróconego przez GetDriverName wartość lpszDriverName w wywołaniu metody CDC::CreateDC.

Przykład

Zobacz przykład dla elementu CPrintDialog::GetDeviceName.

CPrintDialog::GetFromPage

Pobiera stronę początkową zakresu wydruku.

int GetFromPage() const;

Wartość zwracana

Numer strony początkowej w zakresie stron do wydrukowania.

Uwagi

Wywołaj tę funkcję po wywołaniu metody DoModal , aby pobrać numer strony początkowej w zakresie stron do wydrukowania.

Przykład

Zobacz przykład dla elementu CPrintDialog::m_pd.

CPrintDialog::GetPortName

Pobiera nazwę aktualnie wybranego portu drukarki.

CString GetPortName() const;

Wartość zwracana

Nazwa aktualnie wybranego portu drukarki.

Uwagi

Wywołaj tę funkcję po wywołaniu DoModal metody lub GetDefaults pobierz nazwę aktualnie wybranego portu drukarki.

Przykład

Zobacz przykład CPrintDialog::GetDeviceName.

CPrintDialog::GetPrinterDC

Pobiera uchwyt do kontekstu urządzenia drukarki.

HDC GetPrinterDC() const;

Wartość zwracana

Uchwyt do kontekstu urządzenia drukarki, jeśli się powiedzie; w przeciwnym razie NULL.

Uwagi

bPrintSetupOnly Jeśli parametr CPrintDialog konstruktora był FALSE (wskazujący, że jest wyświetlane okno dialogowe Drukowanie), zwraca GetPrinterDC uchwyt do kontekstu urządzenia drukarki. Po zakończeniu korzystania z niej należy wywołać funkcję systemu Windows DeleteDC , aby usunąć kontekst urządzenia.

Przykład

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

Pobiera stronę końcową zakresu wydruku.

int GetToPage() const;

Wartość zwracana

Numer strony końcowej w zakresie stron do wydrukowania.

Uwagi

Wywołaj tę funkcję po wywołaniu metody DoModal w celu pobrania końcowego numeru strony w zakresie stron do wydrukowania.

Przykład

Zobacz przykład dla elementu CPrintDialog::m_pd.

CPrintDialog::m_pd

Struktura, której elementy członkowskie przechowują cechy obiektu okna dialogowego.

PRINTDLG& m_pd;

Uwagi

Po utworzeniu CPrintDialog obiektu można użyć m_pd polecenia , aby ustawić różne aspekty okna dialogowego przed wywołaniem funkcji składowej DoModal . Aby uzyskać więcej informacji na m_pd temat struktury, zobacz PRINTDLG w zestawie Windows SDK.

Jeśli bezpośrednio zmodyfikujesz element członkowski m_pd danych, zastąpisz wszelkie domyślne zachowanie.

Przykład

// 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

Określa, czy mają być drukowane wszystkie strony dokumentu.

BOOL PrintAll() const;

Wartość zwracana

Niezerowe, jeśli wszystkie strony w dokumencie mają być drukowane; w przeciwnym razie 0.

Uwagi

Wywołaj tę funkcję po wywołaniu metody DoModal , aby określić, czy wydrukować wszystkie strony w dokumencie.

Przykład

Zobacz przykład dla elementu CPrintDialog::m_pd.

CPrintDialog::PrintCollate

Określa, czy są żądane sortowanie kopii.

BOOL PrintCollate() const;

Wartość zwracana

Niezero, jeśli użytkownik wybiera pole wyboru sortowania w oknie dialogowym; w przeciwnym razie 0.

Uwagi

Wywołaj tę funkcję po wywołaniu metody , DoModal aby określić, czy drukarka powinna sortować wszystkie drukowane kopie dokumentu.

Przykład

// 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

Określa, czy wyświetlać tylko określony zakres stron.

BOOL PrintRange() const;

Wartość zwracana

Niezerowe, jeśli ma być wydrukowany tylko zakres stron w dokumencie; w przeciwnym razie 0.

Uwagi

Wywołaj tę funkcję po wywołaniu metody DoModal , aby określić, czy wydrukować tylko zakres stron w dokumencie.

Przykład

Zobacz przykład dla elementu CPrintDialog::m_pd.

CPrintDialog::PrintSelection

Określa, czy mają być drukowane tylko aktualnie wybrane elementy.

BOOL PrintSelection() const;

Wartość zwracana

Niezerowe, jeśli tylko wybrane elementy mają być drukowane; w przeciwnym razie 0.

Uwagi

Wywołaj tę funkcję po wywołaniu metody DoModal , aby określić, czy wydrukować tylko aktualnie wybrane elementy.

Przykład

Zobacz przykład dla elementu CPrintDialog::m_pd.

Zobacz też

Przykład MFC DIBLOOK
CCommonDialog Klasa
Wykres hierarchii
CPrintInfo Struktura