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.
CPrintDialog
La 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 CWinApp
distruttore 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 CPrintDialog
funzioni 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 CPrintDialog
di , 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
, GetDefaults
o 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
, GetDefaults
o 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