Condividi tramite


Struttura PRINTDLGEXA (commdlg.h)

Contiene informazioni utilizzate dalla funzione PrintDlgEx per inizializzare la finestra delle proprietà Print. Dopo che l'utente chiude la finestra delle proprietà, il sistema usa questa struttura per restituire informazioni sulle selezioni dell'utente.

Sintassi

typedef struct tagPDEXA {
  DWORD            lStructSize;
  HWND             hwndOwner;
  HGLOBAL          hDevMode;
  HGLOBAL          hDevNames;
  HDC              hDC;
  DWORD            Flags;
  DWORD            Flags2;
  DWORD            ExclusionFlags;
  DWORD            nPageRanges;
  DWORD            nMaxPageRanges;
  LPPRINTPAGERANGE lpPageRanges;
  DWORD            nMinPage;
  DWORD            nMaxPage;
  DWORD            nCopies;
  HINSTANCE        hInstance;
  LPCSTR           lpPrintTemplateName;
  LPUNKNOWN        lpCallback;
  DWORD            nPropertyPages;
  HPROPSHEETPAGE   *lphPropertyPages;
  DWORD            nStartPage;
  DWORD            dwResultAction;
} PRINTDLGEXA, *LPPRINTDLGEXA;

Members

lStructSize

Tipo: DWORD

Dimensioni della struttura, in byte.

hwndOwner

Tipo: HWND

Handle per la finestra proprietaria della finestra delle proprietà. Questo membro deve essere un handle di finestra valido; non può essere NULL.

hDevMode

Tipo: HGLOBAL

Handle per un oggetto memoria globale mobile che contiene una struttura DEVMODE . Se hDevMode non è NULL nell'input, è necessario allocare un blocco mobile di memoria per la struttura DEVMODE e inizializzare i relativi membri. La funzione PrintDlgEx utilizza i dati di input per inizializzare i controlli nella finestra delle proprietà. Quando PrintDlgEx viene restituito, i membri DEVMODE indicano l'input dell'utente.

Se hDevMode è NULL nell'input, PrintDlgEx alloca la memoria per la struttura DEVMODE , inizializza i relativi 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.

hDevNames

Tipo: HGLOBAL

Handle per un oggetto memoria globale mobile che contiene una struttura DEVNAMES . Se hDevNames non è NULL nell'input, è necessario allocare un blocco mobile di memoria per la struttura DEVNAMES e inizializzare i relativi membri. La funzione PrintDlgEx utilizza i dati di input per inizializzare i controlli nella finestra delle proprietà. Quando PrintDlgEx viene restituito, 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, nel qual caso PrintDlgEx alloca memoria per la struttura DEVNAMES , inizializza i relativi 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 per un contesto di dispositivo o un contesto informativo, a seconda che il membro Flags specifichi 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à. Se hDC non è NULL, è necessario chiamare DeleteDC per liberare l'oggetto GDI dopo che non è più necessario; in caso contrario, si perderanno oggetti GDI ogni volta che si chiamano le API PrintDlgw .

Flags

Tipo: DWORD

Set di flag di bit che è possibile utilizzare per inizializzare la finestra delle proprietà Print . Quando la funzione PrintDlgEx viene restituita, imposta questi flag per indicare l'input dell'utente. Questo membro può essere uno o più dei valori seguenti.

Per assicurarsi che PrintDlg o PrintDlgEx restituisca i valori corretti nei membri dmCopies e dmCollate della struttura DEVMODE , impostare PD_RETURNDC = TRUE 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_RETURNDC = TRUE e PD_USEDEVMODECOPIESANDCOLLATE = FALSE. In questo modo , dmCopies è sempre 1 e dmCollate è sempre FALSE.

A partire da Windows Vista, quando chiami 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 1 e usare il data center hDC restituito per evitare di stampare copie duplicate.

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

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

Vedere PD_NOPAGENUMS.

PD_CURRENTPAGE
0x00400000
Se questo flag è impostato, viene selezionato il pulsante di opzione Pagina corrente . Se nessuna delle PD_PAGENUMS, PD_SELECTION o PD_CURRENTPAGE flag è impostata, viene selezionato il pulsante di opzione Tutti .
PD_DISABLEPRINTTOFILE
0x00080000
Disabilita la casella di controllo Stampa su file .
PD_ENABLEPRINTTEMPLATE
0x00004000
Indica che i membri hInstance e lpPrintTemplateName specificano una sostituzione per il modello di finestra di dialogo predefinito nella parte inferiore della pagina Generale . Il modello predefinito contiene controlli simili a quelli della finestra di dialogo Stampa . Il sistema usa il modello specificato per creare una finestra figlio della pagina Generale .
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
Indica che il membro hInstance identifica un blocco di dati che contiene un modello di finestra di dialogo precaricato. Questo modello sostituisce il modello di finestra di dialogo predefinito nella parte inferiore della pagina Generale . Il sistema usa il modello specificato per creare una finestra figlio della pagina Generale . Se questo flag viene specificato, il sistema ignora il membro lpPrintTemplateName .
PD_EXCLUSIONFLAGS
0x01000000
Indica che il membro ExclusionFlags identifica gli elementi da escludere dalle pagine delle proprietà del driver della stampante. Se questo flag non è impostato, gli elementi verranno esclusi per impostazione predefinita dalle pagine delle proprietà del driver della stampante. Le esclusioni impediscono la duplicazione degli elementi tra la pagina Generale , le pagine specificate dall'applicazione e le pagine del driver della stampante.
PD_HIDEPRINTTOFILE
0x00100000
Nasconde la casella di controllo Stampa su file .
PD_NOCURRENTPAGE
0x00800000
Disabilita il pulsante di opzione Pagina corrente .
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 si verifica un errore.
PD_PAGENUMS
0x00000002
Se questo flag è impostato, viene selezionato il pulsante di opzione Pagine . Se nessuna delle PD_PAGENUMS, PD_SELECTION o PD_CURRENTPAGE flag è impostata, viene selezionato il pulsante di opzione Tutti . Se questo flag viene impostato quando la funzione PrintDlgEx restituisce, il membro lpPageRanges indica gli intervalli di pagina specificati dall'utente.
PD_PRINTTOFILE
0x00000020
Se questo flag è impostato, è selezionata la casella di controllo Stampa su file . Se questo flag viene impostato quando PrintDlgEx 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 PrintDlgEx di restituire un contesto del dispositivo corrispondente alle selezioni effettuate dall'utente nel foglio delle proprietà. Il contesto del dispositivo viene restituito in hDC.
PD_RETURNDEFAULT
0x00000400
Se questo flag è impostato, la funzione PrintDlgEx non visualizza il foglio delle proprietà. Imposta invece i membri hDevNames e hDevMode per gestire le strutture DEVNAMES e DEVMODE inizializzate per la stampante predefinita del sistema. Sia hDevNames che hDevMode devono essere NULL o PrintDlgEx 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 nessuna delle PD_PAGENUMS, PD_SELECTION o PD_CURRENTPAGE flag è impostata, viene selezionato il pulsante di opzione Tutti.
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 PRINTDLGEX 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 PRINTDLGEX 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.

Nelle versioni di Windows precedenti a Windows Vista, se questo flag non è impostato dall'applicazione chiamante e dal membro dmCopies della struttura DEVMODE è maggiore di 1, usare tale valore per il numero di copie; in caso contrario, usare il valore del membro nCopies della struttura PRINTDLGEX .

PD_USELARGETEMPLATE
0x10000000
Forza il foglio delle proprietà a usare un modello di grandi dimensioni per la pagina Generale . Il modello più grande offre più spazio per le applicazioni che specificano un modello personalizzato per la parte inferiore della pagina Generale .

Flags2

Tipo: DWORD

ExclusionFlags

Tipo: DWORD

Set di flag di bit che possono escludere elementi dalle pagine delle proprietà del driver della stampante nel foglio delle proprietà Print . Questo valore viene usato solo se il flag di PD_EXCLUSIONFLAGS è impostato nel membro Flags . I flag di esclusione devono essere usati solo se l'elemento da escludere verrà incluso nella pagina Generale o in una pagina definita dall'applicazione nel foglio delle proprietà Print . Questo membro può specificare il flag seguente.

PD_EXCL_COPIESANDCOLLATE

Esclude i controlli Copia e Collate dalle pagine delle proprietà del driver della stampante in un foglio delle proprietà Print . Questo flag deve sempre essere impostato quando l'applicazione usa i controlli Copia e Collate predefiniti forniti dalla parte inferiore della pagina Generale del foglio delle proprietà Print .

nPageRanges

Tipo: DWORD

In input impostare questo membro sul numero iniziale di intervalli di pagine specificati nella matrice lpPageRanges . Quando la funzione PrintDlgEx restituisce, nPageRanges indica il numero di intervalli di pagine specificati dall'utente archiviati nella matrice lpPageRanges . Se viene specificato il flag PD_NOPAGENUMS , questo valore non è valido.

nMaxPageRanges

Tipo: DWORD

Dimensioni, negli elementi della matrice, del buffer lpPageRanges . Questo valore indica il numero massimo di intervalli di pagine che possono essere archiviati nella matrice. Se viene specificato il flag PD_NOPAGENUMS , questo valore non è valido. Se il flag di PD_NOPAGENUMS non è specificato, questo valore deve essere maggiore di zero.

lpPageRanges

Tipo: LPPRINTPAGERANGE

Puntatore a un buffer contenente una matrice di strutture PRINTPAGERANGE . In input, la matrice contiene gli intervalli di pagine iniziali da visualizzare nel controllo Modifica pagine . Quando la funzione PrintDlgEx restituisce, la matrice contiene gli intervalli di pagine specificati dall'utente. Se viene specificato il flag PD_NOPAGENUMS , questo valore non è valido. Se il flag di PD_NOPAGENUMS non è specificato, lpPageRanges deve essere diverso da NULL.

nMinPage

Tipo: DWORD

Valore minimo per gli intervalli di pagine specificati nel controllo Modifica pagine . Se viene specificato il flag PD_NOPAGENUMS , questo valore non è valido.

nMaxPage

Tipo: DWORD

Valore massimo per gli intervalli di pagine specificati nel controllo Modifica pagine . Se viene specificato il flag PD_NOPAGENUMS , questo valore non è valido.

nCopies

Tipo: DWORD

Contiene il 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 PrintDlgExrestituisce, nCopies contiene il numero effettivo di copie che l'applicazione deve 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 è 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 . Se il flag PD_ENABLEPRINTTEMPLATEHANDLE è impostato nel membro Flags , hInstance è un handle su un oggetto memoria contenente un modello di finestra di dialogo. Se nessuno dei flag del modello è impostato nel membro Flags , hInstance deve essere NULL.

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 predefinito nella parte inferiore della pagina Generale . Il modello predefinito contiene controlli simili a quelli della finestra di dialogo Stampa . Questo membro viene ignorato a meno che il flag di PD_ENABLEPRINTTEMPLATE non sia impostato nel membro Flags .

lpCallback

Tipo: LPUNKNOWN

Puntatore a un oggetto callback definito dall'applicazione.

L'oggetto deve contenere la classe IPrintDialogCallback per ricevere messaggi per la finestra di dialogo figlio nella parte inferiore della pagina Generale .

L'oggetto callback deve contenere anche la classe IObjectWithSite per ricevere un puntatore all'interfaccia IPrintDialogServices . La funzione PrintDlgEx chiama IUnknown::QueryInterface nell'oggetto callback per IID_IPrintDialogCallback e IID_IObjectWithSite per determinare quali interfacce sono supportate.

Se non si vuole recuperare alcuna delle informazioni di callback, impostare lpCallback su NULL.

nPropertyPages

Tipo: DWORD

Numero di handle delle pagine delle proprietà nella matrice lphPropertyPages .

lphPropertyPages

Tipo: HPROPSHEETPAGE*

Contiene una matrice di handle di pagine delle proprietà da aggiungere al foglio delle proprietà Print . Le pagine delle proprietà aggiuntive seguono la pagina Generale . Usare la funzione CreatePropertySheetPage per creare queste pagine aggiuntive. Quando la funzione PrintDlgEx restituisce, sono stati eliminati tutti gli handle HPROPSHEETPAGE nella matrice lphPropertyPages . Se nPropertyPages è zero, lphPropertyPages deve essere NULL.

nStartPage

Tipo: DWORD

Pagina della proprietà visualizzata inizialmente. Per visualizzare la pagina Generale , specificare START_PAGE_GENERAL. In caso contrario, specificare l'indice in base zero di una pagina di proprietà nella matrice specificata nel membro lphPropertyPages . Per coerenza, è consigliabile avviare sempre il foglio delle proprietà nella pagina Generale .

dwResultAction

Tipo: DWORD

In input impostare questo membro su zero. Se la funzione PrintDlgEx restituisce S_OK, dwResultAction contiene il risultato della finestra di dialogo. Se PrintDlgEx restituisce un errore, questo membro deve essere ignorato. Il membro dwResultAction può essere uno dei valori seguenti.

PD_RESULT_APPLY

L'utente ha fatto clic sul pulsante Applica e successivamente ha fatto clic sul pulsante Annulla . Ciò indica che l'utente vuole applicare le modifiche apportate nel foglio delle proprietà, ma non vuole ancora stampare. La struttura PRINTDLGEX contiene le informazioni specificate dall'utente al momento in cui è stato fatto clic sul pulsante Applica .

PD_RESULT_CANCEL

L'utente ha fatto clic sul pulsante Annulla . Le informazioni nella struttura PRINTDLGEX sono invariate.

PD_RESULT_PRINT

L'utente ha fatto clic sul pulsante Stampa . La struttura PRINTDLGEX contiene le informazioni specificate dall'utente.

Commenti

Se sia hDevMode che hDevNames sono NULL, PrintDlgEx inizializza il foglio delle proprietà usando la stampante predefinita corrente. Per inizializzare il foglio delle proprietà 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 della stampante. Tuttavia , dmDeviceName è limitato a 32 caratteri e il nome wDeviceOffset non è. Se i nomi wDeviceOffset e dmDeviceName non sono uguali, PrintDlgEx inizializza il foglio delle proprietà usando la stampante specificata da wDeviceOffset.

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

Durante l'esecuzione di PrintDlgEx, le strutture DEVMODE e DEVNAMES specificate nella struttura PRINTDLGEX potrebbero non contenere sempre dati correnti. Per questo motivo, le pagine delle proprietà specifiche dell'applicazione e le routine IPrintDialogCallback per la pagina iniziale devono usare l'interfaccia IPrintDialogServices per recuperare informazioni sullo stato della stampante corrente.

Nota

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

Requisiti

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

Vedi anche

Libreria di finestre di dialogo comuni

Informazioni concettuali

DEVMODE

DEVNAMES

IPrintDialogCallback

IPrintDialogServices

PrintDlgEx

Riferimento