Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Classe
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à
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