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 usare, l'intervallo di pagine da stampare e il numero di copie.

È possibile usare la funzione PrintDlgEx per visualizzare un foglio proprietà di stampa, con una pagina Generale contenente controlli simili alla finestra di dialogo Stampa . Il foglio delle proprietà può anche avere pagine di proprietà specifiche dell'applicazione e specifiche del driver seguendo la pagina Generale .

Si crea e viene visualizzata una finestra di dialogo Stampa inizializzando una struttura PRINTDLG e passando la struttura alla funzione PrintDlg .

La figura seguente mostra una tipica finestra di dialogo Stampa .

finestra di dialogo di stampa

Se l'utente fa clic sul pulsante OK , PrintDlg restituisce TRUE e usa la struttura PRINTDLG per restituire informazioni sulle selezioni dell'utente. Ad esempio, i membri hDevMode e hDevNames restituiscono in genere handle di memoria globali per e strutture DEVNAMES . È possibile usare le informazioni 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 Stampa o si verifica un errore, PrintDlg restituisce FALSE. È possibile determinare la causa di un errore usando la funzione CommDlgExtendedError per recuperare il valore di errore esteso.

La finestra di dialogo Stampa include un gruppo di pulsanti di opzione Range di stampa che indicano se l'utente vuole stampare tutte le pagine, un intervallo di pagine o solo il testo selezionato. Prima di chiamare PrintDlg, è possibile impostare uno dei flag di PD_ALLPAGES, PD_SELECTION o PD_PAGENUMS per indicare il pulsante selezionato inizialmente. Quando PrintDlg restituisce TRUE, la funzione imposta uno di questi flag per indicare le selezioni dell'utente. Se PD_PAGENUMS è impostato, i membri nFromPage e nToPage della struttura PRINTDLG contengono le pagine iniziali e finali specificate dall'utente. Per disabilitare il pulsante di opzione Pages e il relativo controllo From e To edit, impostare il flag di PD_NOPAGENUMS . Per disabilitare il pulsante di opzione Selezione , impostare il flag di 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 specificate dall'utente. Tuttavia, se si imposta il flag PD_USEDEVMODECOPIESANDCOLLATE quando si crea la finestra di dialogo, nCopies è sempre impostato su 1 sul ritorno e il membro dmCopies di DEVMODE indica il numero di copie da stampare.

La casella di controllo Collate indica se l'utente vuole confrontare le pagine se vengono stampate più copie. Il flag PD_COLLATE è impostato se è selezionata la casella di controllo Collate . Se l'applicazione non supporta più copie o regole di confronto simulate, impostare il flag di PD_USEDEVMODECOPIESANDCOLLATE nel membro Flag della struttura PRINTDLG . Questa opzione disabilita la casella di controllo Collate e il controllo Numero di copie modifica a meno che il driver della stampante supporti più copie e regole di confronto.

La casella di controllo Stampa in file indica se l'utente vuole inviare l'output a un file anziché a una stampante. È possibile impostare il flag di PD_PRINTTOFILE in modo che la casella di controllo sia inizialmente selezionata. Per nascondere la casella di controllo, impostare il flag di PD_HIDEPRINTTOFILE . Per disabilitarlo, impostare il flag di PD_DISABLEPRINTTOFILE . Se l'utente seleziona l'opzione Print To 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 lpszOutput della struttura. 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 e una struttura DEVNAMES e assegnare l'handle di memoria globale alla struttura ai membri hDevMode e hDevNames. Il nome del dispositivo specificato nel membro dmDeviceName della struttura DEVMODE e nel membro wDriverOffset della struttura DEVNAMES deve identificare un dispositivo stampante elencato anche nella sezione [Dispositivi] del file Win.ini. Se il dispositivo non è elencato, PrintDlg restituisce un errore.

È possibile indirizzare PrintDlg per creare un contesto di dispositivo o un contesto informativo per la stampante impostando il flag PD_RETURNDC o PD_RETURNIC nel membro Flag della struttura PRINTDLG . La funzione restituisce un handle al contesto del dispositivo o al contesto informativo nel membro hDC . Se si usa il flag di PD_RETURNDC , è possibile usare il contesto del dispositivo per generare l'output per la stampante.

Per recuperare informazioni sulla stampante predefinita senza visualizzare la finestra di dialogo Stampa , impostare il flag di PD_RETURNDEFAULT . In questo caso, PrintDlg restituisce immediatamente dopo aver impostato i membri hDevMode e hDevNames per gli handle per le strutture contenenti le informazioni.

Per impostazione predefinita, PrintDlg visualizza le caselle 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 .

Gli argomenti seguenti vengono illustrati in questa sezione.

Personalizzazione della finestra di dialogo Stampa

È possibile specificare un modello personalizzato per la finestra di dialogo Stampa , ad esempio se si desidera includere controlli aggiuntivi univoci per l'applicazione. La funzione PrintDlg usa il modello personalizzato al posto del modello predefinito.

Per specificare un modello personalizzato per la finestra di dialogo Stampa :

  1. Creare il modello personalizzato modificando il modello predefinito specificato nel file Prnsetup.dlg. Gli identificatori di controllo usati nel modello di dialogo stampa predefinito sono definiti nel file Dlgs.h.
  2. Usare la struttura PRINTDLG per abilitare il modello come indicato di seguito:
    • Se il modello personalizzato è una risorsa in un'applicazione o in una libreria di collegamento dinamico, impostare il flag PD_ENABLEPRINTTEMPLATE nel membro Flags . Usare i membri hInstance e lpPrintTemplateName della struttura per identificare il modulo e il nome della risorsa.

      Oppure

    • Se il modello personalizzato è già in memoria, impostare il flag di PD_ENABLEPRINTTEMPLATEHANDLE . Usare il membro hPrintTemplate per identificare l'oggetto memoria che contiene il modello.

È possibile specificare una procedura di hook PrintHookProc per la finestra di dialogo Stampa . La procedura di 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 procedura di hook per elaborare l'input per i controlli.

Per abilitare una procedura di hook per la finestra di dialogo Stampa :

  1. Impostare il flag di PD_ENABLEPRINTHOOK nel membro Flag della struttura PRINTDLG .
  2. Specificare l'indirizzo della routine hook nel membro lpfnPrintHook .

Dopo l'elaborazione del messaggio WM_INITDIALOG , la procedura della finestra di dialogo invia un messaggio WM_INITDIALOG alla procedura di hook. Il parametro lParam di questo messaggio è un puntatore alla struttura PRINTDLG usata per inizializzare la finestra di dialogo.

È possibile creare e visualizzare una finestra di dialogo Imposta stampa impostando il flag PD_PRINTSETUP in una chiamata alla funzione PrintDlg . Tuttavia, la finestra di dialogo Installazione stampa è stata sostituita dalla finestra di dialogo Imposta pagina e non deve essere usata nelle nuove applicazioni.

I flag seguenti si applicano solo alla finestra di dialogo Installazione stampa :

  • PD_ENABLESETUPHOOK
  • PD_ENABLESETUPTEMPLATE
  • PD_ENABLESETUPTEMPLATEHANDLE