Finestra di dialogo Imposta pagina
Visualizza una finestra di dialogo modale che consente all'utente di impostare gli attributi seguenti della pagina stampata:
- Tipo di carta (busta, legale, lettera e così via)
- Origine carta (alimentazione manuale, alimentazione del trattore, alimentatore foglio e così via)
- Orientamento della pagina (verticale o orizzontale)
- Larghezza dei margini della pagina
Per creare e visualizzare una finestra di dialogo Imposta pagina , inizializzare una struttura PAGESETUPDLG e passare la struttura alla funzione PageSetupDlg . Tuttavia, gli attributi presentati nella finestra di dialogo variano a seconda delle funzionalità della stampante. La figura seguente mostra una tipica finestra di dialogo Imposta pagina .
Se l'utente fa clic sul pulsante OK , PageSetupDlg restituisce TRUE dopo aver impostato vari membri nella struttura PAGESETUPDLG per specificare le selezioni dell'utente. I membri ptPaperSize e rtMargin contengono i valori specificati dall'utente. I membri hDevMode e hDevNames contengono handle di memoria globale per le strutture DEVMODE e DEVNAMES . Queste strutture contengono informazioni aggiuntive sulla pagina e informazioni sulla stampante. È possibile utilizzare queste informazioni per preparare l'output da inviare alla stampante selezionata.
Se l'utente annulla la finestra di dialogo Imposta pagina o si verifica un errore, PageSetupDlg restituisce FALSE. Per determinare la causa dell'errore, chiamare la funzione CommDlgExtendedError per recuperare il valore di errore esteso.
In questa sezione vengono illustrati gli argomenti seguenti.
- Inizializzazione della finestra di dialogo Imposta pagina
- Personalizzazione della finestra di dialogo Imposta pagina
- Personalizzazione della pagina di esempio
Inizializzazione della finestra di dialogo Imposta pagina
Per impostazione predefinita, nella finestra di dialogo Imposta pagina vengono visualizzate informazioni sulla stampante predefinita corrente. Per indirizzare la finestra di dialogo per visualizzare informazioni su una stampante specifica, impostare i membri di una struttura DEVMODE o DEVNAMES e assegnare gli handle di memoria globali di queste strutture al membro corrispondente in PAGESETUPDLG. Se si specifica il nome di una stampante non installata, nella finestra di dialogo viene visualizzato un messaggio di errore. Per impedire alla finestra di dialogo di visualizzare i messaggi di errore, usare il valore PSD_NOWARNING . Per recuperare informazioni sulla stampante predefinita senza visualizzare la finestra di dialogo Imposta pagina, utilizzare il valore PSD_RETURNDEFAULT .
Se il sistema di misurazione predefinito è pollici, la finestra di dialogo utilizza millesimi di pollici come unità di misura predefinita. Se il sistema di misurazione predefinito è metrica, la finestra di dialogo usa centesimi di millimetri come unità di misura predefinita. Per eseguire l'override dell'unità di misura predefinita, impostare il flag PSD_INHUNDREDTHSOFMILLIMETERS o PSD_INTHOUSANDTHSOFINCHES nel membro Flags della struttura PAGESETUPDLG .
I valori iniziali per i margini sono di un pollice, per impostazione predefinita. Se si imposta il flag di PSD_MARGINS , nella finestra di dialogo vengono visualizzati i valori iniziali del margine specificati nel membro rtMargin . I valori minimi predefiniti che l'utente può specificare per i margini sono i margini minimi consentiti dalla stampante. Se si imposta il flag PSD_MINMARGINS , la finestra di dialogo applica i margini minimi specificati nel membro rtMinMargin .
Per impedire agli utenti di selezionare determinate opzioni, impostare qualsiasi combinazione dei flag seguenti per disabilitare i controlli corrispondenti.
Flag | Significato |
---|---|
PSD_DISABLEMARGINS | Disabilita i controlli di modifica in cui l'utente immette le impostazioni del margine. |
PSD_DISABLEORIENTATION | Disabilita i pulsanti di opzione Verticale e Orizzontale . |
PSD_DISABLEPAPER | Disabilita i controlli per la selezione del formato e dell'origine carta. |
PSD_DISABLEPRINTER | Disabilita il pulsante Stampante . |
Personalizzazione della finestra di dialogo Imposta pagina
È possibile specificare un modello personalizzato per la finestra di dialogo Imposta pagina , ad esempio, se si desidera includere controlli aggiuntivi univoci per l'applicazione. La funzione PageSetupDlg usa il modello personalizzato al posto del modello predefinito.
Per specificare un modello personalizzato per la finestra di dialogo Imposta pagina
- Creare il modello personalizzato modificando il modello predefinito specificato nel file Prnsetup.dlg. Gli identificatori di controllo usati nel modello di finestra di dialogo imposta pagina predefinito sono definiti nel file Dlgs.h.
- Usare la struttura PAGESETUPDLG per abilitare il modello come indicato di seguito:
-
Se il modello personalizzato è una risorsa in un'applicazione o in una libreria a collegamento dinamico, impostare il flag PSD_ENABLEPAGESETUPTEMPLATE nel membro Flags . Usare i membri hInstance e lpPageSetupTemplateName della struttura per identificare il modulo e il nome della risorsa.
Oppure
Se il modello personalizzato è già in memoria, impostare il flag di PSD_ENABLEPAGESETUPTEMPLATEHANDLE . Utilizzare il membro hPageSetupTemplate per identificare l'oggetto memoria che contiene il modello.
-
Per filtrare i messaggi inviati alla procedura della finestra di dialogo, è possibile specificare una procedura di hook PageSetupHook . Se si usa un modello personalizzato per definire controlli aggiuntivi, è necessario fornire una routine hook PageSetupHook per elaborare l'input per i controlli. È anche possibile specificare una routine hook PagePaintHook per personalizzare il contenuto della pagina di esempio visualizzata dalla finestra di dialogo Imposta pagina . Per altre informazioni sulla procedura di hook PagePaintHook , vedere Personalizzazione della pagina di esempio.
Per abilitare una routine hook PageSetupHook
- Impostare il flag PSD_ENABLEPAGESETUPHOOK nel membro Flags della struttura PAGESETUPDLG .
- Specificare l'indirizzo della routine hook nel membro lpfnPageSetupHook .
Dopo l'elaborazione del messaggio WM_INITDIALOG , la procedura della finestra di dialogo invia un messaggio WM_INITDIALOG alla routine hook PageSetupHook . Il parametro lParam di questo messaggio è un puntatore alla struttura PAGESETUPDLG utilizzata per inizializzare la finestra di dialogo.
Personalizzazione della pagina di esempio
La finestra di dialogo Imposta pagina include un'immagine di una pagina di esempio che mostra come le selezioni dell'utente influiscono sull'aspetto dell'output stampato. L'immagine è costituita da un rettangolo che rappresenta il tipo di carta o busta selezionato, con un rettangolo di linea tratteggiata che rappresenta i margini correnti e i caratteri parziali (testo greco) per mostrare l'aspetto del testo nella pagina stampata.
Quando si chiama la funzione PageSetupDlg , è possibile fornire una routine hook PagePaintHook per personalizzare l'aspetto della pagina di esempio.
Per abilitare una routine hook PagePaintHook
- Impostare il flag PSD_ENABLEPAGEPAINTHOOK nel membro Flags della struttura PAGESETUPDLG .
- Specificare l'indirizzo della routine hook nel membro lpfnPagePaintHook .
Ogni volta che la finestra di dialogo sta per disegnare il contenuto della pagina di esempio, la procedura hook riceve i messaggi seguenti nell'ordine in cui sono elencati.
Messaggio | Significato |
---|---|
WM_PSD_PAGESETUPDLG | La finestra di dialogo sta per disegnare la pagina di esempio. La procedura hook può utilizzare questo messaggio per prepararsi a disegnare il contenuto della pagina di esempio. |
WM_PSD_FULLPAGERECT | La finestra di dialogo sta per disegnare la pagina di esempio. Questo messaggio specifica il rettangolo di delimitazione della pagina di esempio. |
WM_PSD_MINMARGINRECT | La finestra di dialogo sta per disegnare la pagina di esempio. Questo messaggio specifica il rettangolo del margine. |
WM_PSD_MARGINRECT | La finestra di dialogo sta per disegnare il rettangolo del margine. |
WM_PSD_GREEKTEXTRECT | La finestra di dialogo sta per disegnare il testo greco all'interno del rettangolo del margine. |
WM_PSD_ENVSTAMPRECT | La finestra di dialogo sta per disegnare nel rettangolo di busta di una pagina di esempio di busta. Questo messaggio viene inviato solo per le buste. |
WM_PSD_YAFULLPAGERECT | La finestra di dialogo sta per disegnare la parte dell'indirizzo restituito di una pagina di esempio della busta. Questo messaggio viene inviato per buste e altri formati di carta. |
Se la routine hook restituisce TRUE per uno dei primi tre messaggi di una sequenza di disegno (WM_PSD_PAGESETUPDLG, WM_PSD_FULLPAGERECT o WM_PSD_MINMARGINRECT) la finestra di dialogo non invia altri messaggi e non disegna nella pagina di esempio fino alla successiva necessità di ridisegnare la pagina di esempio. Se la routine hook restituisce FALSE per tutti e tre i messaggi, la finestra di dialogo invia i messaggi rimanenti della sequenza di disegno.
Se la routine hook restituisce TRUE per uno dei messaggi rimanenti in una sequenza di disegno, la finestra di dialogo non disegna la parte corrispondente della pagina di esempio. Se la routine hook restituisce FALSE per uno di questi messaggi, la finestra di dialogo disegna tale parte della pagina di esempio.
Per impedire alla finestra di dialogo di disegnare il contenuto della pagina di esempio, è possibile impostare il flag di PSD_DISABLEPAGEPAINTING . Questo flag non influisce sulla procedura di hook PagePaintHook , che riceve comunque tutti i messaggi WM_PSD_* e può disegnare il contenuto della pagina di esempio.