Struttura PRINTDLGA (commdlg.h)

Contiene informazioni usate dalla funzione PrintDlg per inizializzare la finestra di dialogo stampa. Dopo aver chiuso la finestra di dialogo, il sistema usa questa struttura per restituire informazioni sulle selezioni dell'utente.

Sintassi

typedef struct tagPDA {
  DWORD           lStructSize;
  HWND            hwndOwner;
  HGLOBAL         hDevMode;
  HGLOBAL         hDevNames;
  HDC             hDC;
  DWORD           Flags;
  WORD            nFromPage;
  WORD            nToPage;
  WORD            nMinPage;
  WORD            nMaxPage;
  WORD            nCopies;
  HINSTANCE       hInstance;
  LPARAM          lCustData;
  LPPRINTHOOKPROC lpfnPrintHook;
  LPSETUPHOOKPROC lpfnSetupHook;
  LPCSTR          lpPrintTemplateName;
  LPCSTR          lpSetupTemplateName;
  HGLOBAL         hPrintTemplate;
  HGLOBAL         hSetupTemplate;
} PRINTDLGA, *LPPRINTDLGA;

Members

lStructSize

Tipo: DWORD

Dimensioni della struttura, in byte.

hwndOwner

Tipo: HWND

Handle nella finestra che possiede la finestra di dialogo. Questo membro può essere qualsiasi handle di finestra valido oppure può essere NULL se la finestra di dialogo non ha alcun proprietario.

hDevMode

Tipo: HGLOBAL

Handle per un oggetto memoria globale mobile contenente una struttura DEVMODE . Se hDevMode non è NULL in input, è necessario allocare un blocco di memoria mobile per la struttura DEVMODE e inizializzare i relativi membri. La funzione PrintDlg usa i dati di input per inizializzare i controlli nella finestra di dialogo. Quando PrintDlg restituisce, i membri DEVMODE indicano l'input dell'utente.

Se hDevMode è NULL in input, PrintDlg alloca la memoria per la struttura DEVMODE , inizializza i membri per indicare l'input dell'utente e restituisce un handle che lo identifica.

Se il driver di dispositivo per la stampante specificata non supporta le modalità di dispositivo estese, hDevMode è NULL quando PrintDlg restituisce.

Se il nome del dispositivo (specificato dal membro dmDeviceName della struttura DEVMODE ) non viene visualizzato nella sezione [dispositivi] di WIN.INI, PrintDlg restituisce un errore.

Per altre informazioni sui membri hDevMode e hDevNames , vedere la sezione Osservazioni alla fine di questo argomento.

hDevNames

Tipo: HGLOBAL

Handle per un oggetto di memoria globale mobile contenente una struttura DEVNAMES . Se hDevNames non è NULL nell'input, è necessario allocare un blocco di memoria mobile per la struttura DEVNAMES e inizializzare i relativi membri. La funzione PrintDlg usa i dati di input per inizializzare i controlli nella finestra di dialogo. Quando PrintDlg restituisce, i membri DEVNAMES contengono informazioni per la stampante scelta dall'utente. È possibile usare queste informazioni per creare un contesto di dispositivo o un contesto informativo.

Il membro hDevNames può essere NULL, in tal caso PrintDlg alloca la memoria per la struttura DEVNAMES , inizializza i membri per indicare l'input dell'utente e restituisce un handle che lo identifica.

Per altre informazioni sui membri hDevMode e hDevNames , vedere la sezione Osservazioni alla fine di questo argomento.

hDC

Tipo: HDC

Handle in un contesto di dispositivo o in un contesto informativo, a seconda che il membro Flags specifica il flag PD_RETURNDC o PC_RETURNIC . Se non viene specificato alcun flag, il valore di questo membro non è definito. Se vengono specificati entrambi i flag, PD_RETURNDC ha priorità.

Flags

Tipo: DWORD

Inizializza la finestra di dialogo Stampa . Quando la finestra di dialogo restituisce, imposta questi flag per indicare l'input dell'utente. Questo membro può essere uno o più dei valori seguenti.

Valore Significato
PD_ALLPAGES
0x00000000
Flag predefinito che indica che il pulsante di opzione Tutto è inizialmente selezionato. Questo flag viene usato come segnaposto per indicare che i flag PD_PAGENUMS e PD_SELECTION non sono specificati.
PD_COLLATE
0x00000010
Se questo flag è impostato, è selezionata la casella di controllo Collate .

Se questo flag viene impostato quando la funzione PrintDlg restituisce, l'applicazione deve simulare le regole di confronto di più copie. Per altre informazioni, vedere la descrizione del flag di PD_USEDEVMODECOPIESANDCOLLATE .

Vedere PD_NOPAGENUMS.

PD_DISABLEPRINTTOFILE
0x00080000
Disabilita la casella di controllo Stampa su file .
PD_ENABLEPRINTHOOK
0x00001000
Abilita la procedura di hook specificata nel membro lpfnPrintHook . In questo modo viene attivata la procedura di hook per la finestra di dialogo Stampa .
PD_ENABLEPRINTTEMPLATE
0x00004000
Indica che i membri hInstance e lpPrintTemplateName specificano una sostituzione per il modello di finestra di dialogo Stampa predefinito.
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
Indica che il membro hPrintTemplate identifica un blocco di dati contenente un modello di finestra di dialogo precaricati. Questo modello sostituisce il modello predefinito per la finestra di dialogo Stampa . Il sistema ignora il membro lpPrintTemplateName se questo flag è specificato.
PD_ENABLESETUPHOOK
0x00002000
Abilita la procedura di hook specificata nel membro lpfnSetupHook . In questo modo viene attivata la procedura di hook per la finestra di dialogo Installazione stampa .
PD_ENABLESETUPTEMPLATE
0x00008000
Indica che i membri hInstance e lpSetupTemplateName specificano una sostituzione per il modello di finestra di dialogo Installazione stampa predefinito.
PD_ENABLESETUPTEMPLATEHANDLE
0x00020000
Indica che il membro hSetupTemplate identifica un blocco di dati contenente un modello di finestra di dialogo precaricati. Questo modello sostituisce il modello predefinito per la finestra di dialogo Installazione stampa . Il sistema ignora il membro lpSetupTemplateName se questo flag è specificato.
PD_HIDEPRINTTOFILE
0x00100000
Nasconde la casella di controllo Stampa in file .
PD_NONETWORKBUTTON
0x00200000
Nasconde e disabilita il pulsante Rete .
PD_NOPAGENUMS
0x00000008
Disabilita il pulsante di opzione Pages e i controlli di modifica associati. Inoltre, la casella di controllo Collate viene visualizzata nella finestra di dialogo.
PD_NOSELECTION
0x00000004
Disabilita il pulsante di opzione Selezione .
PD_NOWARNING
0x00000080
Impedisce la visualizzazione del messaggio di avviso quando non è presente alcuna stampante predefinita.
PD_PAGENUMS
0x00000002
Se questo flag è impostato, viene selezionato il pulsante di opzione Pages . Se questo flag viene impostato quando la funzione PrintDlg restituisce, i membri nFromPage e nToPage indicano le pagine iniziali e finali specificate dall'utente.
PD_PRINTSETUP
0x00000040
Consente al sistema di visualizzare la finestra di dialogo Imposta stampa anziché la finestra di dialogo Stampa .
PD_PRINTTOFILE
0x00000020
Se questo flag è impostato, è selezionata la casella di controllo Stampa su file . Se questo flag viene impostato quando la funzione PrintDlg restituisce, l'offset indicato dal membro wOutputOffset della struttura DEVNAMES contiene la stringa "FILE:". Quando si chiama la funzione StartDoc per avviare l'operazione di stampa, specificare questa stringa "FILE:" nel membro lpszOutput della struttura DOCINFO . Se si specifica questa stringa, il sottosistema di stampa esegue una query sull'utente per il nome del file di output.
PD_RETURNDC
0x00000100
Consente a PrintDlg di restituire un contesto del dispositivo corrispondente alle selezioni effettuate dall'utente nella finestra di dialogo. Il contesto del dispositivo viene restituito in hDC.
PD_RETURNDEFAULT
0x00000400
Se questo flag è impostato, la funzione PrintDlg non visualizza la finestra di dialogo. Imposta invece i membri hDevNames e hDevMode per gestire le strutture DEVMODE e DEVNAMES inizializzate per la stampante predefinita del sistema. Sia hDevNames che hDevMode devono essere NULL o PrintDlg restituisce un errore.
PD_RETURNIC
0x00000200
Analogamente al flag di PD_RETURNDC , ad eccezione di questo flag, restituisce un contesto informativo anziché un contesto del dispositivo. Se non viene specificato né PD_RETURNDCPD_RETURNIC , hDC non è definito nell'output.
PD_SELECTION
0x00000001
Se questo flag è impostato, viene selezionato il pulsante di opzione Selezione . Se non viene impostato né PD_PAGENUMSPD_SELECTION , viene selezionato il pulsante di opzione Tutto .
PD_SHOWHELP
0x00000800
Fa sì che la finestra di dialogo visualizzi il pulsante Guida . Il membro hwndOwner deve specificare la finestra per ricevere i messaggi registrati HELPMSGSTRING inviati dalla finestra di dialogo quando l'utente fa clic sul pulsante Guida .
PD_USEDEVMODECOPIES
0x00040000
Uguale a PD_USEDEVMODECOPIESANDCOLLATE.
PD_USEDEVMODECOPIESANDCOLLATE
0x00040000
Questo flag indica se l'applicazione supporta più copie e regole di confronto. Impostare questo flag sull'input per indicare che l'applicazione non supporta più copie e regole di confronto. In questo caso, il membro nCopies della struttura PRINTDLG restituisce sempre 1 e PD_COLLATE non viene mai impostato nel membro Flags .

Se questo flag non è impostato, l'applicazione è responsabile della stampa e della confronto di più copie. In questo caso, il membro nCopies della struttura PRINTDLG indica il numero di copie che l'utente vuole stampare e il flag PD_COLLATE nel membro Flags indica se l'utente vuole regole di confronto.

Indipendentemente dal fatto che questo flag sia impostato, un'applicazione può determinare da nCopies e PD_COLLATE il numero di copie da eseguire per il rendering e se stamparli con confronto.

Se questo flag è impostato e il driver della stampante non supporta più copie, il controllo Copia modifica è disabilitato. Analogamente, se questo flag è impostato e il driver della stampante non supporta le regole di confronto, la casella di controllo Collate è disabilitata.

I membri dmCopies e dmCollate della struttura DEVMODE contengono le copie e comprimere le informazioni usate dal driver della stampante. Se questo flag è impostato e il driver della stampante supporta più copie, il membro dmCopies indica il numero di copie richieste dall'utente. Se questo flag è impostato e il driver della stampante supporta le regole di confronto, il membro dmCollate della struttura DEVMODE indica se l'utente vuole regole di confronto. Se questo flag non è impostato, il membro dmCopies restituisce sempre 1 e il membro dmCollate è sempre zero.

Problema noto in Windows 2000/XP/2003: Se questo flag non è impostato prima di chiamare PrintDlg, PrintDlg potrebbe scambiare valori nCopies e dmCopies quando restituisce. La soluzione alternativa per questo problema è usare dmCopies se il relativo valore è maggiore di 1, usare nCopies, per ottenere il numero effettivo di copie da stampare quando PrintDlg restituisce.

 

Per assicurarsi che PrintDlg o PrintDlgEx restituisca i valori corretti nei membri dmCopies e dmCollate della struttura DEVMODE, impostare PD_RETURNDCTRUE e PD_USEDEVMODECOPIESANDCOLLATE = = TRUE. In questo modo, il membro nCopies della struttura PRINTDLG è sempre 1 e PD_COLLATE è sempre FALSE.

Per assicurarsi che PrintDlg o PrintDlgEx restituisca i valori corretti in nCopies e PD_COLLATE, impostare PD_RETURNDCTRUE e PD_USEDEVMODECOPIESANDCOLLATE = = FALSE. In questo modo , dmCopies è sempre 1 e dmCollate è sempre FALSE.

In Windows Vista e Windows 7, quando si chiama PrintDlg o PrintDlgEx con PD_RETURNDC impostato su TRUE e PD_USEDEVMODECOPIESANDCOLLATE impostato su FALSE, la funzione PrintDlg o PrintDlgEx imposta il numero di copie nel membro nCopies della struttura PRINTDLG e imposta il numero di copie nella struttura rappresentata dal membro HDC della struttura PRINTDLG.

Quando si effettuano chiamate a GDI, è necessario ignorare il valore di nCopies, considerare il valore come 1 e usare l'hDC restituito per evitare la stampa di copie duplicate.

nFromPage

Tipo: WORD

Valore iniziale per il controllo di modifica della pagina iniziale.

Quando PrintDlg restituisce, nFromPage è la pagina iniziale specificata dall'utente. Se il pulsante di opzione Pages viene selezionato quando l'utente fa clic sul pulsante Okay , PrintDlg imposta il flag PD_PAGENUMS e non restituisce finché l'utente non immette un valore di pagina iniziale compreso nell'intervallo minimo di pagina massimo.

Se il valore di input per nFromPage o nToPage non è compreso nell'intervallo minimo/massimo, PrintDlg restituisce un errore solo se viene specificato il flag di PD_PAGENUMS ; in caso contrario, visualizza la finestra di dialogo, ma modifica il valore di intervallo esterno al valore minimo o massimo.

nToPage

Tipo: WORD

Valore iniziale per il controllo di modifica della pagina finale. Quando PrintDlg restituisce, nToPage è la pagina finale specificata dall'utente. Se il pulsante di opzione Pages viene selezionato quando l'uso fa clic sul pulsante Okay , PrintDlg imposta il flag PD_PAGENUMS e non restituisce finché l'utente non immette un valore di pagina finale compreso nell'intervallo minimo di pagina massimo.

nMinPage

Tipo: WORD

Valore minimo per l'intervallo di pagine specificato nei controlli Modifica pagina da e a . Se nMinPage è uguale a nMaxPage, il pulsante di opzione Pages e i controlli di modifica della pagina iniziale e finale della pagina sono disabilitati.

nMaxPage

Tipo: WORD

Valore massimo per l'intervallo di pagine specificato nei controlli Modifica pagina da e a .

nCopies

Tipo: WORD

Numero iniziale di copie per il controllo Copia modifica se hDevMode è NULL; in caso contrario, il membro dmCopies della struttura DEVMODE contiene il valore iniziale. Quando PrintDlgrestituisce, nCopies contiene il numero effettivo di copie da stampare. Questo valore dipende dal fatto che l'applicazione o il driver della stampante sia responsabile della stampa di più copie. Se il flag di PD_USEDEVMODECOPIESANDCOLLATE è impostato nel membro Flags , nCopies è sempre 1 al ritorno e il driver della stampante è responsabile della stampa di più copie. Se il flag non è impostato, l'applicazione è responsabile della stampa del numero di copie specificate da nCopies. Per altre informazioni, vedere la descrizione del flag di PD_USEDEVMODECOPIESANDCOLLATE .

hInstance

Tipo: HINSTANCE

Se il flag PD_ENABLEPRINTTEMPLATE o PD_ENABLESETUPTEMPLATE è impostato nel membro Flags, hInstance è un handle per l'applicazione o l'istanza del modulo che contiene il modello di finestra di dialogo denominato dal membro lpPrintTemplateName o lpSetupTemplateName.

lCustData

Tipo: LPARAM

Dati definiti dall'applicazione che il sistema passa alla procedura di hook identificata dal membro lpfnPrintHook o lpfnSetupHook. Quando il sistema invia il messaggio di WM_INITDIALOG alla procedura di hook, il parametro lParam del messaggio è un puntatore alla struttura PRINTDLG specificata al momento della creazione della finestra di dialogo. La procedura di hook può usare questo puntatore per ottenere il valore lCustData .

lpfnPrintHook

Tipo: LPPRINTHOOKPROC

Puntatore a una routine di hook PrintHookProc che può elaborare i messaggi destinati alla finestra di dialogo Stampa . Questo membro viene ignorato a meno che il flag di PD_ENABLEPRINTHOOK non sia impostato nel membro Flags .

lpfnSetupHook

Tipo: LPSETUPHOOKPROC

Puntatore a una routine di hook SetupHookProc che può elaborare i messaggi destinati alla finestra di dialogo Installazione stampa . Questo membro viene ignorato a meno che il flag di PD_ENABLESETUPHOOK non sia impostato nel membro Flags .

lpPrintTemplateName

Tipo: LPCTSTR

Nome della risorsa modello della finestra di dialogo nel modulo identificato dal membro hInstance . Questo modello sostituisce il modello di finestra di dialogo Stampa predefinito. Questo membro viene ignorato a meno che il flag di PD_ENABLEPRINTTEMPLATE non sia impostato nel membro Flags .

lpSetupTemplateName

Tipo: LPCTSTR

Nome della risorsa modello della finestra di dialogo nel modulo identificato dal membro hInstance . Questo modello sostituisce il modello di configurazione di stampa predefinito. Questo membro viene ignorato a meno che il flag di PD_ENABLESETUPTEMPLATE sia impostato nel membro Flags .

hPrintTemplate

Tipo: HGLOBAL

Se il flag PD_ENABLEPRINTTEMPLATEHANDLE è impostato nel membro Flags , hPrintTemplate è un handle su un oggetto memoria contenente un modello di finestra di dialogo. Questo modello sostituisce il modello di finestra di dialogo Stampa predefinito.

hSetupTemplate

Tipo: HGLOBAL

Se il flag di PD_ENABLESETUPTEMPLATEHANDLE è impostato nel membro Flags , hSetupTemplate è un handle su un oggetto memoria contenente un modello di finestra di dialogo. Questo modello sostituisce il modello predefinito della finestra di dialogo Imposta stampante .

Commenti

Se sia hDevMode che hDevNames sono NULL, PrintDlg inizializza la finestra di dialogo utilizzando la stampante predefinita corrente. Per inizializzare la finestra di dialogo per una stampante diversa, usare il membro wDeviceOffset della struttura DEVNAMES per specificare il nome della stampante.

Si noti che il membro dmDeviceName della struttura DEVMODE specifica anche un nome di stampante. Tuttavia, dmDeviceName è limitato a 32 caratteri e il nome wDeviceOffset non è. Se i nomi wDeviceOffset e dmDeviceName non sono uguali, PrintDlg inizializza la finestra di dialogo usando la stampante specificata da wDeviceOffset.

Se il flag PD_RETURNDEFAULT è impostato e sia hDevMode che hDevNames sono NULL, PrintDlg usa i membri hDevNames e hDevMode per restituire informazioni sulla stampante predefinita corrente senza visualizzare la finestra di dialogo.

Nota

L'intestazione commdlg.h definisce PRINTDLG come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice che non è indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzioni.

Requisiti

   
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Intestazione commdlg.h (include Windows.h)

Vedi anche

Libreria delle finestre di dialogo comuni

Informazioni concettuali

DEVMODE

DEVNAMES

PrintDlg

Riferimento

WM_INITDIALOG