Condividi tramite


Classe CPrintDialog

Incapsula i servizi forniti dalla finestra di dialogo comune di Windows per la stampa.

Sintassi

class CPrintDialog : public CCommonDialog

Membri

Costruttori pubblici

Nome Descrizione
CPrintDialog::CPrintDialog Costruisce un oggetto CPrintDialog.

Metodi pubblici

Nome Descrizione
CPrintDialog::CreatePrinterDC Crea un contesto di dispositivo della stampante senza visualizzare la finestra di dialogo Stampa.
CPrintDialog::DoModal Visualizza la finestra di dialogo e consente all'utente di effettuare una selezione.
CPrintDialog::GetCopies Recupera il numero di copie richieste.
CPrintDialog::GetDefaults Recupera le impostazioni predefinite del dispositivo senza visualizzare una finestra di dialogo.
CPrintDialog::GetDeviceName Recupera il nome del dispositivo stampante attualmente selezionato.
CPrintDialog::GetDevMode Recupera la DEVMODE struttura.
CPrintDialog::GetDriverName Recupera il nome del driver della stampante attualmente selezionato.
CPrintDialog::GetFromPage Recupera la pagina iniziale dell'intervallo di stampa.
CPrintDialog::GetPortName Recupera il nome della porta della stampante attualmente selezionata.
CPrintDialog::GetPrinterDC Recupera un handle nel contesto del dispositivo della stampante.
CPrintDialog::GetToPage Recupera la pagina finale dell'intervallo di stampa.
CPrintDialog::PrintAll Determina se stampare tutte le pagine del documento.
CPrintDialog::PrintCollate Determina se vengono richieste copie collate.
CPrintDialog::PrintRange Determina se stampare solo un intervallo specificato di pagine.
CPrintDialog::PrintSelection Determina se stampare solo gli elementi attualmente selezionati.

Membri dati pubblici

Nome Descrizione
CPrintDialog::m_pd Struttura utilizzata per personalizzare un CPrintDialog oggetto.

Osservazioni:

Le finestre di dialogo di stampa comuni offrono un modo semplice per implementare le finestre di dialogo Imposta stampa e stampa in modo coerente con gli standard di Windows.

Nota

La CPrintDialogEx classe incapsula i servizi forniti dalla finestra delle proprietà di Windows Print. Per altre informazioni, vedere la CPrintDialogEx panoramica.

CPrintDialogLa funzionalità di è sostituita da quella di CPageSetupDialog, progettata per offrire una finestra di dialogo comune per la configurazione della stampa e della pagina.

È possibile fare affidamento sul framework per gestire molti aspetti del processo di stampa per l'applicazione. In questo caso, il framework visualizza automaticamente la finestra di dialogo Comune di Windows per la stampa. È anche possibile utilizzare il framework handle printing per l'applicazione, ma eseguire l'override della finestra di dialogo stampa comune con la finestra di dialogo stampa personalizzata. Per altre informazioni sull'uso del framework per gestire le attività di stampa, vedere l'articolo Stampa.

Se si vuole che l'applicazione gestisca la stampa senza il coinvolgimento del framework, è possibile usare la CPrintDialog classe "così come è" con il costruttore fornito oppure è possibile derivare la propria classe di dialogo da CPrintDialog e scrivere un costruttore in base alle proprie esigenze. In entrambi i casi, queste finestre di dialogo si comportano come finestre di dialogo MFC standard perché derivano dalla classe CCommonDialog.

Per usare un CPrintDialog oggetto , creare prima di tutto l'oggetto usando il CPrintDialog costruttore . Dopo aver costruito la finestra di dialogo, è possibile impostare o modificare qualsiasi valore nella m_pd struttura per inizializzare i valori dei controlli della finestra di dialogo. La m_pd struttura è di tipo PRINTDLG. Per altre informazioni su questa struttura, vedere Windows SDK.

Se non si specificano handle personalizzati per m_pd i membri e hDevNames , assicurarsi di chiamare la funzione GlobalFree Windows per questi handle al termine della hDevMode finestra di dialogo. Quando si usa l'implementazione dell'installazione di stampa del framework fornita da CWinApp::OnFilePrintSetup, non è necessario liberare questi handle. Gli handle vengono gestiti da CWinApp e vengono liberati nel CWinAppdistruttore di . È necessario liberare questi handle solo quando si usa l'uso CPrintDialog autonomo.

Dopo aver inizializzato i controlli della finestra di dialogo, chiamare la DoModal funzione membro per visualizzare la finestra di dialogo e consentire all'utente di selezionare le opzioni di stampa. DoModal restituisce un valore che indica se l'utente ha selezionato il pulsante OK (IDOK) o Annulla (IDCANCEL).

Se DoModal restituisce IDOK, è possibile usare una delle CPrintDialogfunzioni membro di per recuperare l'input delle informazioni dall'utente.

La CPrintDialog::GetDefaults funzione membro è utile per recuperare le impostazioni predefinite della stampante corrente senza visualizzare una finestra di dialogo. Questa funzione membro non richiede alcuna interazione dell'utente.

È possibile utilizzare la funzione Windows CommDlgExtendedError per determinare se si è verificato un errore durante l'inizializzazione della finestra di dialogo e per altre informazioni sull'errore. Per altre informazioni su questa funzione, vedere Windows SDK.

CPrintDialog si basa sul COMMDLG.DLL file fornito con Windows 3.1 e versioni successive.

Per personalizzare la finestra di dialogo, derivare una classe da CPrintDialog, fornire un modello di finestra di dialogo personalizzato e aggiungere una mappa messaggi per elaborare i messaggi di notifica dai controlli estesi. Tutti i messaggi non elaborati devono essere passati alla classe base. La personalizzazione della funzione hook non è necessaria.

Per elaborare lo stesso messaggio in modo diverso a seconda che la finestra di dialogo sia Stampa o Imposta stampa, è necessario derivare una classe per ogni finestra di dialogo. È inoltre necessario eseguire l'override della funzione Windows AttachOnSetup , che gestisce la creazione di una nuova finestra di dialogo quando il pulsante Imposta stampa è selezionato all'interno di una finestra di dialogo Stampa.

Per altre informazioni sull'uso CPrintDialogdi , vedere Classi di dialoghi comuni.

Gerarchia di ereditarietà

CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

CPrintDialog

Requisiti

Intestazione: afxdlgs.h

CPrintDialog::CPrintDialog

Costruisce un oggetto finestra di dialogo Windows Print o Print Setup.

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

Parametri

bPrintSetupOnly
Specifica se viene visualizzata la finestra di dialogo Stampa di Windows standard o la finestra di dialogo Imposta stampa. Impostare questo parametro su TRUE per visualizzare la finestra di dialogo Standard Di installazione stampa di Windows. Impostarlo su FALSE per visualizzare la finestra di dialogo Stampa di Windows. Se bPrintSetupOnly è FALSE, nella finestra di dialogo Stampa viene ancora visualizzato un pulsante di opzione Imposta stampa.

dwFlags
Uno o più flag che è possibile usare per personalizzare le impostazioni della finestra di dialogo, combinate usando l'operatore OR bit per bit. Ad esempio, il PD_ALLPAGES flag imposta l'intervallo di stampa predefinito su tutte le pagine del documento. Per altre informazioni su questi flag, vedere la PRINTDLG struttura in Windows SDK.

pParentWnd
Puntatore alla finestra padre o proprietario della finestra di dialogo.

Osservazioni:

Questa funzione membro costruisce solo l'oggetto . Utilizzare la DoModal funzione membro per visualizzare la finestra di dialogo.

Si noti che quando si chiama il costruttore con bPrintSetupOnly impostato su FALSE, il PD_RETURNDC flag viene usato automaticamente. Dopo aver chiamato DoModal, GetDefaultso GetPrinterDC, un controller di dominio della stampante verrà restituito in m_pd.hDC. Questo controller di dominio deve essere liberato con una chiamata a DeleteDC dal chiamante di CPrintDialog.

Esempio

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

Crea un contesto di dispositivo della stampante dalle DEVMODE strutture e DEVNAMES .

HDC CreatePrinterDC();

Valore restituito

Handle nel contesto del dispositivo della stampante appena creato.

Osservazioni:

Si presuppone che questo controller di dominio sia il controller di dominio corrente della stampante e qualsiasi altro controller di dominio della stampante precedentemente ottenuto deve essere eliminato dall'utente. Questa funzione può essere chiamata e il controller di dominio risultante usato, senza mai visualizzare la finestra di dialogo Stampa.

Esempio

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

Visualizza la finestra di dialogo Stampa comune di Windows e consente all'utente di selezionare varie opzioni di stampa, ad esempio il numero di copie, l'intervallo di pagine e se le copie devono essere confrontate.

virtual INT_PTR DoModal();

Valore restituito

IDOK o IDCANCEL. Se IDCANCEL viene restituito, chiamare la funzione Windows CommDlgExtendedError per determinare se si è verificato un errore.

IDOK e IDCANCEL sono costanti che indicano se l'utente ha selezionato il pulsante OK o Annulla .

Osservazioni:

Se si desidera inizializzare le varie opzioni della finestra di dialogo di stampa impostando i membri della m_pd struttura, è necessario eseguire questa operazione prima di chiamare DoModal, ma dopo la costruzione dell'oggetto dialogo.

Dopo aver chiamato DoModal, è possibile chiamare altre funzioni membro per recuperare le impostazioni o l'input di informazioni da parte dell'utente nella finestra di dialogo.

Si noti che quando si chiama il costruttore con bPrintSetupOnly impostato su FALSE, il PD_RETURNDC flag viene usato automaticamente. Dopo aver chiamato DoModal, GetDefaultso GetPrinterDC, un controller di dominio della stampante verrà restituito in m_pd.hDC. Questo controller di dominio deve essere liberato con una chiamata a DeleteDC dal chiamante di CPrintDialog.

Esempio

Vedere l'esempio per CPrintDialog::CreatePrinterDC.

CPrintDialog::GetCopies

Recupera il numero di copie richieste.

int GetCopies() const;

Valore restituito

Numero di copie richieste.

Osservazioni:

Chiamare questa funzione dopo aver chiamato DoModal per recuperare il numero di copie richieste.

Esempio

Vedere l'esempio per CPrintDialog::PrintCollate.

CPrintDialog::GetDefaults

Recupera le impostazioni predefinite del dispositivo della stampante predefinita senza visualizzare una finestra di dialogo.

BOOL GetDefaults();

Valore restituito

Diverso da zero se la funzione ha avuto esito positivo; in caso contrario, 0.

Osservazioni:

I valori recuperati vengono inseriti nella m_pd struttura .

In alcuni casi, una chiamata a questa funzione chiamerà il costruttore per CPrintDialog con bPrintSetupOnly impostato su FALSE. In questi casi, un controller di dominio della stampante e hDevNames hDevMode (due handle che si trovano nel m_pd membro dati) vengono allocati automaticamente.

Se il costruttore per CPrintDialog è stato chiamato con bPrintSetupOnly impostato su FALSE, questa funzione non restituirà hDevNames e hDevMode si trova solo in m_pd.hDevNames e m_pd.hDevMode) al chiamante, ma restituirà anche un controller di dominio della stampante in m_pd.hDC. È responsabilità del chiamante eliminare il controller di dominio della stampante e chiamare la funzione Windows GlobalFree negli handle al termine dell'oggetto CPrintDialog .

Esempio

Questo frammento di codice ottiene il contesto del dispositivo della stampante predefinito e segnala all'utente la risoluzione della stampante in punti per pollice. Questo attributo delle funzionalità della stampante viene spesso definito 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

Recupera il nome del dispositivo stampante attualmente selezionato.

CString GetDeviceName() const;

Valore restituito

Nome della stampante attualmente selezionata.

Osservazioni:

Chiamare questa funzione dopo aver chiamato DoModal per recuperare il nome della stampante attualmente selezionata o dopo aver chiamato GetDefaults per recuperare le impostazioni predefinite del dispositivo corrente della stampante predefinita. Usare un puntatore all'oggetto CString restituito da GetDeviceName come valore di lpszDeviceName in una chiamata a CDC::CreateDC.

Esempio

Questo frammento di codice mostra il nome della stampante predefinito dell'utente e la porta a cui è connesso, insieme al nome dello spooler usato dalla stampante. Il codice potrebbe visualizzare una finestra di messaggio che indica che la stampante predefinita è HP LaserJet IIIP in \\server\share con winspool.", ad esempio.

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

Recupera la DEVMODE struttura.

LPDEVMODE GetDevMode() const;

Valore restituito

Struttura DEVMODE dei dati, che contiene informazioni sull'inizializzazione del dispositivo e sull'ambiente di un driver di stampa. È necessario sbloccare la memoria utilizzata da questa struttura con la funzione Windows GlobalUnlock , descritta in Windows SDK.

Osservazioni:

Chiamare questa funzione dopo aver chiamato DoModal o GetDefaults per recuperare informazioni sul dispositivo di stampa.

Esempio

Vedere l'esempio per CPrintDialog::PrintCollate.

CPrintDialog::GetDriverName

Recupera il nome del driver della stampante attualmente selezionato.

CString GetDriverName() const;

Valore restituito

Oggetto CString che specifica il nome del driver definito dal sistema.

Osservazioni:

Chiamare questa funzione dopo aver chiamato DoModal o GetDefaults per recuperare il nome del driver di dispositivo della stampante definito dal sistema. Usare un puntatore all'oggetto CString restituito da GetDriverName come valore di lpszDriverName in una chiamata a CDC::CreateDC.

Esempio

Vedere l'esempio per CPrintDialog::GetDeviceName.

CPrintDialog::GetFromPage

Recupera la pagina iniziale dell'intervallo di stampa.

int GetFromPage() const;

Valore restituito

Numero di pagina iniziale nell'intervallo di pagine da stampare.

Osservazioni:

Chiamare questa funzione dopo aver chiamato DoModal per recuperare il numero di pagina iniziale nell'intervallo di pagine da stampare.

Esempio

Vedere l'esempio per CPrintDialog::m_pd.

CPrintDialog::GetPortName

Recupera il nome della porta della stampante attualmente selezionata.

CString GetPortName() const;

Valore restituito

Nome della porta della stampante attualmente selezionata.

Osservazioni:

Chiamare questa funzione dopo aver chiamato DoModal o GetDefaults per recuperare il nome della porta della stampante attualmente selezionata.

Esempio

Vedere l'esempio per CPrintDialog::GetDeviceName.

CPrintDialog::GetPrinterDC

Recupera un handle nel contesto del dispositivo della stampante.

HDC GetPrinterDC() const;

Valore restituito

Handle per il contesto del dispositivo della stampante se ha esito positivo; in caso contrario NULL, .

Osservazioni:

Se il bPrintSetupOnly parametro del CPrintDialog costruttore era FALSE (a indicare che viene visualizzata la finestra di dialogo Stampa), GetPrinterDC restituisce un handle al contesto del dispositivo della stampante. È necessario chiamare la funzione di Windows DeleteDC per eliminare il contesto di dispositivo al termine dell'uso.

Esempio

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

Recupera la pagina finale dell'intervallo di stampa.

int GetToPage() const;

Valore restituito

Numero di pagina finale nell'intervallo di pagine da stampare.

Osservazioni:

Chiamare questa funzione dopo aver chiamato DoModal per recuperare il numero di pagina finale nell'intervallo di pagine da stampare.

Esempio

Vedere l'esempio per CPrintDialog::m_pd.

CPrintDialog::m_pd

Struttura i cui membri archiviano le caratteristiche dell'oggetto dialogo.

PRINTDLG& m_pd;

Osservazioni:

Dopo aver costruito un CPrintDialog oggetto, è possibile usare m_pd per impostare vari aspetti della finestra di dialogo prima di chiamare la DoModal funzione membro. Per altre informazioni sulla m_pd struttura, vedere PRINTDLG in Windows SDK.

Se si modifica direttamente il m_pd membro dati, si eseguirà l'override di qualsiasi comportamento predefinito.

Esempio

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

Determina se stampare tutte le pagine del documento.

BOOL PrintAll() const;

Valore restituito

Diverso da zero se devono essere stampate tutte le pagine del documento; in caso contrario, 0.

Osservazioni:

Chiamare questa funzione dopo aver chiamato DoModal per determinare se stampare tutte le pagine del documento.

Esempio

Vedere l'esempio per CPrintDialog::m_pd.

CPrintDialog::PrintCollate

Determina se vengono richieste copie collate.

BOOL PrintCollate() const;

Valore restituito

Diverso da zero se l'utente seleziona la casella di controllo collate nella finestra di dialogo; in caso contrario, 0.

Osservazioni:

Chiamare questa funzione dopo aver chiamato DoModal per determinare se la stampante deve collacare tutte le copie stampate del documento.

Esempio

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

Determina se stampare solo un intervallo specificato di pagine.

BOOL PrintRange() const;

Valore restituito

Diverso da zero se è necessario stampare solo un intervallo di pagine nel documento; in caso contrario, 0.

Osservazioni:

Chiamare questa funzione dopo aver chiamato DoModal per determinare se stampare solo un intervallo di pagine nel documento.

Esempio

Vedere l'esempio per CPrintDialog::m_pd.

CPrintDialog::PrintSelection

Determina se stampare solo gli elementi attualmente selezionati.

BOOL PrintSelection() const;

Valore restituito

Diverso da zero se devono essere stampati solo gli elementi selezionati; in caso contrario, 0.

Osservazioni:

Chiamare questa funzione dopo aver chiamato DoModal per determinare se stampare solo gli elementi attualmente selezionati.

Esempio

Vedere l'esempio per CPrintDialog::m_pd.

Vedi anche

Esempio MFC DIBLOOK
CCommonDialog Classe
Grafico della gerarchia
CPrintInfo Struttura