Finestra di dialogo Stampa
La finestra di dialogo Stampa consente all'utente di selezionare le opzioni per un determinato processo di stampa. Ad esempio, l'utente può specificare la stampante da utilizzare, l'intervallo di pagine da stampare e il numero di copie.
È possibile utilizzare la funzione PrintDlgEx per visualizzare un Foglio Proprietà di Stampa, con una pagina Generale contenente controlli simili alla finestra di dialogo di stampa . La finestra delle proprietà può anche avere pagine di proprietà aggiuntive specifiche dell'applicazione e specifiche del driver dopo la pagina generale.
È possibile creare e visualizzare una finestra di dialogo stampa inizializzando una strutturaPRINTDLGe passando la struttura alla funzionePrintDlg.
La figura seguente mostra una tipica finestra di dialogo stampa.
Se l'utente fa clic sul pulsante OK, PrintDlg restituisce TRUE e utilizza la strutturaPRINTDLGper restituire informazioni sulle selezioni dell'utente. Ad esempio, i membri hDevMode e hDevNames restituiscono in genere handle di memoria globali per le strutture DEVNAMES. È possibile utilizzare le informazioni contenute in queste strutture per creare un contesto di dispositivo o un contesto informativo per la stampante selezionata.
Se l'utente annulla la finestra di dialogo di stampa o si verifica un errore, PrintDlg restituisce FALSE. È possibile determinare la causa di un errore usando la funzioneCommDlgExtendedError per recuperare il valore di errore esteso.
La finestra di dialogo Stampa include un gruppo di pulsanti di opzione Intervallo di stampa che indica se l'utente desidera stampare tutte le pagine, un intervallo di pagine o solo il testo selezionato. Prima di chiamare PrintDlg, è possibile impostare uno dei flag PD_ALLPAGES, PD_SELECTIONo PD_PAGENUMS per indicare quale pulsante è inizialmente selezionato. Quando PrintDlg restituisce TRUE, la funzione imposta uno di questi flag per indicare le selezioni dell'utente. Se PD_PAGENUMS è impostato, il nFromPage e nToPage membri della struttura PRINTDLG contengono le pagine iniziali e finali specificate dall'utente. Per disabilitare il pulsante di opzione Pagine di e il relativo associato Da e A controlli di modifica, impostare il flag di PD_NOPAGENUMS. Per disabilitare il pulsante di opzione Selezione , impostare il flag PD_NOSELECTION.
La finestra di dialogo include un controllo di modifica in cui l'utente può digitare il numero di copie da stampare. Se il membro hDevMode della struttura PRINTDLG non èNULL, il membro dmCopies della struttura specifica il valore iniziale per questo controllo di modifica. Se hDevMode è NULL, il membro nCopies della struttura PRINTDLG specifica il valore iniziale. Quando PrintDlg restituisce, nCopies indica in genere il numero di copie specificato dall'utente. Tuttavia, se si imposta il flag PD_USEDEVMODECOPIESANDCOLLATE quando si crea la finestra di dialogo, nCopies viene sempre impostato su 1 al momento del ritorno e il dmCopies membro di DEVMODE indica il numero di copie da stampare.
La casella di controllo Collate indica se l'utente desidera collare le pagine se vengono stampate più copie. Il flag PD_COLLATE viene impostato se la casella di controllo intercalare è selezionata. Se l'applicazione non supporta più copie o collazione simulata, impostare il flag PD_USEDEVMODECOPIESANDCOLLATE nel membro Flags della struttura PRINTDLG. Ciò disabilita la casella di controllo Collate e il controllo di modifica Numero di copie , a meno che il driver della stampante non supporti copie multiple e collazione.
La casella di controllo Stampa su file indica se l'utente desidera inviare l'output a un file anziché a una stampante. È possibile impostare il flag PD_PRINTTOFILE in modo che la casella di controllo sia inizialmente selezionata. Per nascondere la casella di controllo, impostare il flag PD_HIDEPRINTTOFILE. Per disabilitarla, impostare il flag PD_DISABLEPRINTTOFILE. Se l'utente seleziona l'opzione Stampa in file, PrintDlg imposta il flag PD_PRINTTOFILE e restituisce "FILE:" all'offset indicato dal membro wOutputOffset della struttura DEVNAMES. Quando si chiama la funzione per avviare l'operazione di stampa, specificare questa stringa "FILE:" nel membro della struttura lpszOutput. Se si specifica questa stringa, il sottosistema di stampa esegue una query sull'utente per il nome del file di output.
Per impostazione predefinita, la finestra di dialogo stampa visualizza inizialmente informazioni sulla stampante predefinita corrente. Per visualizzare informazioni per un'altra stampante installata, inizializzare una struttura DEVNAMES e assegnare l'handle di memoria globale della struttura ai membri hDevMode e hDevNames. Il nome del dispositivo che specifichi nel membro dmDeviceName della struttura DEVMODE e nel membro wDriverOffset della struttura DEVNAMES deve identificare un dispositivo stampante che sia elencato nella sezione [Devices] del file Win.ini. Se il dispositivo non è elencato, PrintDlg restituisce un errore.
È possibile PrintDlg per creare un contesto di dispositivo o un contesto informativo per la stampante impostando il flag PD_RETURNDC o PD_RETURNIC nel Flag membro della struttura PRINTDLG. La funzione restituisce un handle al contesto di dispositivo o al contesto informativo nel membro hDC. Se si usa il flag PD_RETURNDC, è possibile usare il contesto di dispositivo per generare l'output per la stampante.
Per recuperare informazioni sulla stampante predefinita senza visualizzare la finestra di dialogo Stampa, impostare il flag PD_RETURNDEFAULT. In questo caso, PrintDlg restituisce immediatamente dopo aver impostato il hDevMode e hDevNames membri da gestire per le strutture contenenti le informazioni.
Per impostazione predefinita, PrintDlg visualizza le finestre di messaggio quando si verificano errori. Ad esempio, la funzione visualizza un messaggio di errore se non sono installate stampanti. Per impedire alla funzione di visualizzare questi messaggi di avviso, impostare il flag di PD_NOWARNING.
In questa sezione vengono illustrati gli argomenti seguenti.
Personalizzazione della finestra di dialogo Stampa
È possibile fornire un modello personalizzato per la finestra di dialogo stampa , ad esempio se si desidera includere controlli aggiuntivi univoci per l'applicazione. La funzionePrintDlgusa il modello personalizzato al posto del modello predefinito.
Per fornire un modello personalizzato per la finestra di dialogo stampa :
- Creare il modello personalizzato modificando il modello predefinito specificato nel file Prnsetup.dlg. Gli identificatori di controllo usati nel modello di finestra di dialogo Stampa predefinito vengono definiti nel file Dlgs.h.
- Utilizzare la struttura PRINTDLG per abilitare il modello nel modo seguente:
Se il modello personalizzato è una risorsa in un'applicazione o in una libreria a collegamento dinamico, impostare il flag PD_ENABLEPRINTTEMPLATE nel membro Flags. Usare il hInstance e lpPrintTemplateName membri della struttura per identificare il modulo e il nome della risorsa.
-O-
Se il modello personalizzato è già in memoria, impostare il flag PD_ENABLEPRINTTEMPLATEHANDLE. Utilizzare il membro hPrintTemplate per identificare l'oggetto memoria che contiene il modello.
È possibile specificare una PrintHookProc routine hook per la finestra di dialogo Stampa. La procedura hook può elaborare i messaggi inviati alla finestra di dialogo. Può anche inviare messaggi alla finestra di dialogo. Se si usa un modello personalizzato per definire controlli aggiuntivi, è necessario fornire una routine hook per elaborare l'input per i controlli.
Per abilitare una procedura hook per la finestra di dialogo stampa:
- Impostare il flag PD_ENABLEPRINTHOOK nel membro Flags della struttura PRINTDLG.
- Specificare l'indirizzo della routine hook nel membro lpfnPrintHook.
Dopo l'elaborazione del messaggio WM_INITDIALOG, la routine della finestra di dialogo invia un messaggio WM_INITDIALOG alla routine hook. Il parametro lParam di questo messaggio è un puntatore alla strutturaPRINTDLG utilizzata per inizializzare la finestra di dialogo.
Finestra di dialogo di impostazione di stampa
È possibile creare e visualizzare una finestra di dialogo Impostazione Stampa impostando il flag PD_PRINTSETUP in una chiamata alla funzione PrintDlg. Tuttavia, la finestra di dialogo impostazione di stampa è stata sostituita dalla finestra di dialogo impostazione della pagina e non dovrebbe essere utilizzata nelle nuove applicazioni.
I seguenti flag si applicano solo alla finestra di dialogo Impostazione di stampa:
- PD_ENABLESETUPHOOK
- PD_ENABLESETUPTEMPLATE
- PD_ENABLESETUPTEMPLATEHANDLE