Structure PRINTDLGEXA (commdlg.h)

Contient les informations que la fonction PrintDlgEx utilise pour initialiser la feuille de propriétés Print. Une fois que l’utilisateur a fermé la feuille de propriétés, le système utilise cette structure pour retourner des informations sur les sélections de l’utilisateur.

Syntaxe

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;

Membres

lStructSize

Type : DWORD

Taille de structure, en octets.

hwndOwner

Type : HWND

Handle de la fenêtre qui possède la feuille de propriétés. Ce membre doit être un handle de fenêtre valide ; il ne peut pas être NULL.

hDevMode

Type : HGLOBAL

Handle vers un objet de mémoire globale mobile qui contient une structure DEVMODE . Si hDevMode n’a pas la valeur NULL en entrée, vous devez allouer un bloc de mémoire mobile pour la structure DEVMODE et initialiser ses membres. La fonction PrintDlgEx utilise les données d’entrée pour initialiser les contrôles dans la feuille de propriétés. Lorsque PrintDlgEx retourne, les membres DEVMODE indiquent l’entrée de l’utilisateur.

Si hDevMode a la valeur NULL en entrée, PrintDlgEx alloue de la mémoire pour la structure DEVMODE , initialise ses membres pour indiquer l’entrée de l’utilisateur et retourne un handle qui l’identifie.

Pour plus d’informations sur les membres hDevMode et hDevNames , consultez la section Remarques à la fin de cette rubrique.

hDevNames

Type : HGLOBAL

Handle vers un objet de mémoire globale mobile qui contient une structure DEVNAMES . Si hDevNames n’a pas la valeur NULL en entrée, vous devez allouer un bloc de mémoire mobile pour la structure DEVNAMES et initialiser ses membres. La fonction PrintDlgEx utilise les données d’entrée pour initialiser les contrôles dans la feuille de propriétés. Lorsque PrintDlgEx retourne, les membres DEVNAMES contiennent des informations pour l’imprimante choisie par l’utilisateur. Vous pouvez utiliser ces informations pour créer un contexte d’appareil ou un contexte d’information.

Le membre hDevNames peut être NULL, auquel cas PrintDlgEx alloue de la mémoire pour la structure DEVNAMES , initialise ses membres pour indiquer l’entrée de l’utilisateur et retourne un handle qui l’identifie.

Pour plus d’informations sur les membres hDevMode et hDevNames , consultez la section Remarques à la fin de cette rubrique.

hDC

Type : HDC

Handle vers un contexte d’appareil ou un contexte d’information, selon que le membre Flags spécifie l’indicateur PD_RETURNDC ou PC_RETURNIC . Si aucun indicateur n’est spécifié, la valeur de ce membre n’est pas définie. Si les deux indicateurs sont spécifiés, PD_RETURNDC a priorité. Si hDC n’a pas la valeur NULL, vous devez appeler DeleteDC pour libérer l’objet GDI une fois que vous n’en avez plus besoin ; sinon, vous allez fuiter des objets GDI chaque fois que vous appelez des API PrintDlgw .

Flags

Type : DWORD

Ensemble d’indicateurs de bits que vous pouvez utiliser pour initialiser la feuille de propriétés Print . Lorsque la fonction PrintDlgEx retourne, elle définit ces indicateurs pour indiquer l’entrée de l’utilisateur. Ce membre peut être une ou plusieurs des valeurs suivantes.

Pour vous assurer que PrintDlg ou PrintDlgEx retourne les valeurs correctes dans les membres dmCopies et dmCollate de la structure DEVMODE , définissez PD_RETURNDC = TRUE et PD_USEDEVMODECOPIESANDCOLLATE = TRUE. Ce faisant, le membre nCopies de la structure PRINTDLG est toujours 1 et PD_COLLATE est toujours FALSE.

Pour vous assurer que PrintDlg ou PrintDlgEx retourne les valeurs correctes dans nCopies et PD_COLLATE, définissez PD_RETURNDC = TRUE et PD_USEDEVMODECOPIESANDCOLLATE = FALSE. Dans ce cas, dmCopies est toujours 1 et dmCollate est toujours FALSE.

À compter de Windows Vista, lorsque vous appelez PrintDlg ou PrintDlgEx avec PD_RETURNDC défini sur TRUE et PD_USEDEVMODECOPIESANDCOLLATE défini sur FALSE, la fonction PrintDlg ou PrintDlgEx définit le nombre de copies dans le membre nCopies de la structure PRINTDLG et définit le nombre de copies dans la structure représentée par le membre hDC de la structure PRINTDLG .

Lorsque vous effectuez des appels à GDI, vous devez ignorer la valeur de nCopies, considérer la valeur comme 1 et utiliser le hDC retourné pour éviter d’imprimer des copies en double.

Valeur Signification
PD_ALLPAGES
0x00000000
Indicateur par défaut qui indique que la case d’option Tous est initialement sélectionnée. Cet indicateur est utilisé comme espace réservé pour indiquer que les indicateurs PD_PAGENUMS, PD_SELECTION et PD_CURRENTPAGE ne sont pas spécifiés.
PD_COLLATE
0x00000010
Si cet indicateur est défini, la zone Coller case activée est sélectionnée.

Si cet indicateur est défini lorsque la fonction PrintDlgEx est retournée, l’application doit simuler le classement de plusieurs copies. Pour plus d’informations, consultez la description de l’indicateur PD_USEDEVMODECOPIESANDCOLLATE .

Voir PD_NOPAGENUMS.

PD_CURRENTPAGE
0x00400000
Si cet indicateur est défini, la case d’option Page actuelle est sélectionnée. Si aucun indicateur PD_PAGENUMS, PD_SELECTION ou PD_CURRENTPAGE n’est défini, la case d’option Tous est sélectionnée.
PD_DISABLEPRINTTOFILE
0x00080000
Désactive la zone d’case activée Imprimer dans un fichier.
PD_ENABLEPRINTTEMPLATE
0x00004000
Indique que les membres hInstance et lpPrintTemplateName spécifient un remplacement pour le modèle de boîte de dialogue par défaut dans la partie inférieure de la page Général . Le modèle par défaut contient des contrôles similaires à ceux de la boîte de dialogue Imprimer . Le système utilise le modèle spécifié pour créer une fenêtre enfant de la page Général .
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
Indique que le membre hInstance identifie un bloc de données qui contient un modèle de boîte de dialogue préchargé. Ce modèle remplace le modèle de boîte de dialogue par défaut dans la partie inférieure de la page Général . Le système utilise le modèle spécifié pour créer une fenêtre enfant de la page Général . Le système ignore le membre lpPrintTemplateName si cet indicateur est spécifié.
PD_EXCLUSIONFLAGS
0x01000000
Indique que le membre ExclusionFlags identifie les éléments à exclure des pages de propriétés du pilote d’imprimante. Si cet indicateur n’est pas défini, les éléments sont exclus par défaut des pages de propriétés du pilote d’imprimante. Les exclusions empêchent la duplication d’éléments entre la page Général , toutes les pages spécifiées par l’application et les pages du pilote d’imprimante.
PD_HIDEPRINTTOFILE
0x00100000
Masque la zone d’case activée Imprimer dans un fichier.
PD_NOCURRENTPAGE
0x00800000
Désactive la case d’option Page active .
PD_NOPAGENUMS
0x00000008
Désactive la case d’option Pages et les contrôles d’édition associés. En outre, la boîte de dialogue Coller case activée s’affiche.
PD_NOSELECTION
0x00000004
Désactive la case d’option Sélection .
PD_NOWARNING
0x00000080
Empêche l’affichage du message d’avertissement en cas d’erreur.
PD_PAGENUMS
0x00000002
Si cet indicateur est défini, la case d’option Pages est sélectionnée. Si aucun indicateur PD_PAGENUMS, PD_SELECTION ou PD_CURRENTPAGE n’est défini, la case d’option Tous est sélectionnée. Si cet indicateur est défini lorsque la fonction PrintDlgEx retourne, le membre lpPageRanges indique les plages de pages spécifiées par l’utilisateur.
PD_PRINTTOFILE
0x00000020
Si cet indicateur est défini, la zone Imprimer dans le fichier case activée est sélectionnée. Si cet indicateur est défini lorsque PrintDlgEx est retourné, le décalage indiqué par le membre wOutputOffset de la structure DEVNAMES contient la chaîne « FILE: ». Lorsque vous appelez la fonction StartDoc pour démarrer l’opération d’impression, spécifiez cette chaîne « FILE: » dans le membre lpszOutput de la structure DOCINFO . Si vous spécifiez cette chaîne, le sous-système d’impression interroge l’utilisateur pour obtenir le nom du fichier de sortie.
PD_RETURNDC
0x00000100
Force PrintDlgEx à renvoyer un contexte d’appareil correspondant aux sélections effectuées par l’utilisateur dans la feuille de propriétés. Le contexte de l’appareil est retourné dans hDC.
PD_RETURNDEFAULT
0x00000400
Si cet indicateur est défini, la fonction PrintDlgEx n’affiche pas la feuille de propriétés. Au lieu de cela, il définit les membres hDevNames et hDevMode sur les handles sur les structures DEVNAMES et DEVMODE qui sont initialisées pour l’imprimante système par défaut. HDevNames et hDevMode doivent être NULL, ou PrintDlgEx retourne une erreur.
PD_RETURNIC
0x00000200
Semblable à l’indicateur PD_RETURNDC , cet indicateur renvoie un contexte d’information plutôt qu’un contexte d’appareil. Si ni PD_RETURNDC ni PD_RETURNIC n’est spécifié, hDC n’est pas défini sur la sortie.
PD_SELECTION
0x00000001
Si cet indicateur est défini, la case d’option Sélection est sélectionnée. Si aucun indicateur PD_PAGENUMS, PD_SELECTION ou PD_CURRENTPAGE n’est défini, la case d’option Tous est sélectionnée.
PD_USEDEVMODECOPIES
0x00040000
Identique à PD_USEDEVMODECOPIESANDCOLLATE.
PD_USEDEVMODECOPIESANDCOLLATE
0x00040000
Cet indicateur indique si votre application prend en charge plusieurs copies et classements. Définissez cet indicateur sur l’entrée pour indiquer que votre application ne prend pas en charge plusieurs copies et classement. Dans ce cas, le membre nCopies de la structure PRINTDLGEX retourne toujours 1 et PD_COLLATE n’estjamais défini dans le membre Flags.

Si cet indicateur n’est pas défini, l’application est responsable de l’impression et du classement de plusieurs copies. Dans ce cas, le membre nCopies de la structure PRINTDLGEX indique le nombre de copies que l’utilisateur souhaite imprimer, et l’indicateur PD_COLLATE dans le membre Indicateurs indique si l’utilisateur souhaite un classement.

Que cet indicateur soit défini ou non, une application peut déterminer à partir de nCopies et PD_COLLATE combien de copies afficher et si elles doivent être imprimées ou non.

Si cet indicateur est défini et que le pilote d’imprimante ne prend pas en charge plusieurs copies, le contrôle d’édition Copies est désactivé. De même, si cet indicateur est défini et que le pilote d’imprimante ne prend pas en charge le classement, la zone Case activée est désactivée.

Les membres dmCopies et dmCollate de la structure DEVMODE contiennent les copies et les informations de regroupement utilisées par le pilote d’imprimante. Si cet indicateur est défini et que le pilote d’imprimante prend en charge plusieurs copies, le membre dmCopies indique le nombre de copies demandées par l’utilisateur. Si cet indicateur est défini et que le pilote d’imprimante prend en charge le classement, le membre dmCollate de la structure DEVMODE indique si l’utilisateur souhaite un classement. Si cet indicateur n’est pas défini, le membre dmCopies retourne toujours 1 et le membre dmCollate est toujours égal à zéro.

Dans les versions de Windows antérieures à Windows Vista, si cet indicateur n’est pas défini par l’application appelante et que le membre dmCopies de la structure DEVMODE est supérieur à 1, utilisez cette valeur pour le nombre de copies ; sinon, utilisez la valeur du membre nCopies de la structure PRINTDLGEX .

PD_USELARGETEMPLATE
0x10000000
Force la feuille de propriétés à utiliser un modèle volumineux pour la page Général . Le modèle plus grand offre plus d’espace aux applications qui spécifient un modèle personnalisé pour la partie inférieure de la page Général .

Flags2

Type : DWORD

ExclusionFlags

Type : DWORD

Ensemble d’indicateurs de bits qui peuvent exclure des éléments des pages de propriétés du pilote d’imprimante dans la feuille des propriétés Imprimer . Cette valeur est utilisée uniquement si l’indicateur PD_EXCLUSIONFLAGS est défini dans le membre Indicateurs . Les indicateurs d’exclusion ne doivent être utilisés que si l’élément à exclure est inclus dans la page Général ou sur une page définie par l’application dans la feuille de propriétés Imprimer . Ce membre peut spécifier l’indicateur suivant.

PD_EXCL_COPIESANDCOLLATE

Exclut les contrôles Copies et Collate des pages de propriétés du pilote d’imprimante dans une feuille de propriétés Print . Cet indicateur doit toujours être défini lorsque l’application utilise les contrôles Copies et Collate par défaut fournis par la partie inférieure de la page Général de la feuille de propriétés Imprimer .

nPageRanges

Type : DWORD

Lors de l’entrée, définissez ce membre sur le nombre initial de plages de pages spécifié dans le tableau lpPageRanges . Lorsque la fonction PrintDlgEx retourne, nPageRanges indique le nombre de plages de pages spécifiées par l’utilisateur stockées dans le tableau lpPageRanges . Si l’indicateur PD_NOPAGENUMS est spécifié, cette valeur n’est pas valide.

nMaxPageRanges

Type : DWORD

Taille, dans les éléments de tableau, de la mémoire tampon lpPageRanges . Cette valeur indique le nombre maximal de plages de pages pouvant être stockées dans le tableau. Si l’indicateur PD_NOPAGENUMS est spécifié, cette valeur n’est pas valide. Si l’indicateur PD_NOPAGENUMS n’est pas spécifié, cette valeur doit être supérieure à zéro.

lpPageRanges

Type : LPPRINTPAGERANGE

Pointeur vers une mémoire tampon contenant un tableau de structures PRINTPAGERANGE . Lors de l’entrée, le tableau contient les plages de pages initiales à afficher dans le contrôle d’édition Pages . Lorsque la fonction PrintDlgEx retourne, le tableau contient les plages de pages spécifiées par l’utilisateur. Si l’indicateur PD_NOPAGENUMS est spécifié, cette valeur n’est pas valide. Si l’indicateur PD_NOPAGENUMS n’est pas spécifié, lpPageRanges doit être non NULL.

nMinPage

Type : DWORD

Valeur minimale pour les plages de pages spécifiées dans le contrôle d’édition Pages . Si l’indicateur PD_NOPAGENUMS est spécifié, cette valeur n’est pas valide.

nMaxPage

Type : DWORD

Valeur maximale pour les plages de pages spécifiées dans le contrôle d’édition Pages . Si l’indicateur PD_NOPAGENUMS est spécifié, cette valeur n’est pas valide.

nCopies

Type : DWORD

Contient le nombre initial de copies pour le contrôle d’édition Copies si hDevMode a la valeur NULL ; sinon, le membre dmCopies de la structure DEVMODE contient la valeur initiale. Lorsque PrintDlgEx est retourné, nCopies contient le nombre réel de copies que l’application doit imprimer. Cette valeur varie selon que l’application ou le pilote d’imprimante est responsable de l’impression de plusieurs copies. Si l’indicateur PD_USEDEVMODECOPIESANDCOLLATE est défini dans le membre Indicateurs , nCopies est toujours 1 au retour et le pilote d’imprimante est responsable de l’impression de plusieurs copies. Si l’indicateur n’est pas défini, l’application est responsable de l’impression du nombre de copies spécifiées par nCopies. Pour plus d’informations, consultez la description de l’indicateur PD_USEDEVMODECOPIESANDCOLLATE .

hInstance

Type : HINSTANCE

Si l’indicateur PD_ENABLEPRINTTEMPLATE est défini dans le membre Flags, hInstance est un handle de l’application ou du module instance qui contient le modèle de boîte de dialogue nommé par le membre lpPrintTemplateName. Si l’indicateur PD_ENABLEPRINTTEMPLATEHANDLE est défini dans le membre Flags , hInstance est un handle pour un objet mémoire contenant un modèle de boîte de dialogue. Si aucun des indicateurs de modèle n’est défini dans le membre Flags , hInstance doit avoir la valeur NULL.

lpPrintTemplateName

Type : LPCTSTR

Nom de la ressource de modèle de boîte de dialogue dans le module identifié par le membre hInstance . Ce modèle remplace le modèle de boîte de dialogue par défaut dans la partie inférieure de la page Général . Le modèle par défaut contient des contrôles similaires à ceux de la boîte de dialogue Imprimer . Ce membre est ignoré, sauf si l’indicateur PD_ENABLEPRINTTEMPLATE est défini dans le membre Indicateurs .

lpCallback

Type : LPUNKNOWN

Pointeur vers un objet de rappel défini par l’application.

L’objet doit contenir la classe IPrintDialogCallback pour recevoir des messages pour la boîte de dialogue enfant dans la partie inférieure de la page Général .

L’objet de rappel doit également contenir la classe IObjectWithSite pour recevoir un pointeur vers l’interface IPrintDialogServices . La fonction PrintDlgEx appelle IUnknown::QueryInterface sur l’objet de rappel pour IID_IPrintDialogCallback et IID_IObjectWithSite afin de déterminer les interfaces prises en charge.

Si vous ne souhaitez pas récupérer les informations de rappel, définissez lpCallback sur NULL.

nPropertyPages

Type : DWORD

Nombre de handles de page de propriétés dans le tableau lphPropertyPages .

lphPropertyPages

Type : HPROPSHEETPAGE*

Contient un tableau de poignées de page de propriétés à ajouter à la feuille de propriétés Print . Les pages de propriétés supplémentaires suivent la page Général . Utilisez la fonction CreatePropertySheetPage pour créer ces pages supplémentaires. Lorsque la fonction PrintDlgEx retourne, tous les handles HPROPSHEETPAGE du tableau lphPropertyPages ont été détruits. Si nPropertyPages est égal à zéro, lphPropertyPages doit avoir la valeur NULL.

nStartPage

Type : DWORD

Page de propriétés initialement affichée. Pour afficher la page Général , spécifiez START_PAGE_GENERAL. Sinon, spécifiez l’index de base zéro d’une page de propriétés dans le tableau spécifié dans le membre lphPropertyPages . Pour la cohérence, il est recommandé de toujours démarrer la feuille de propriétés dans la page Général .

dwResultAction

Type : DWORD

En entrée, définissez ce membre sur zéro. Si la fonction PrintDlgEx retourne S_OK, dwResultAction contient le résultat de la boîte de dialogue. Si PrintDlgEx retourne une erreur, ce membre doit être ignoré. Le membre dwResultAction peut être l’une des valeurs suivantes.

PD_RESULT_APPLY

L’utilisateur a cliqué sur le bouton Appliquer , puis sur le bouton Annuler . Cela indique que l’utilisateur souhaite appliquer les modifications apportées à la feuille de propriétés, mais ne souhaite pas encore imprimer. La structure PRINTDLGEX contient les informations spécifiées par l’utilisateur au moment où l’utilisateur a cliqué sur le bouton Appliquer .

PD_RESULT_CANCEL

L’utilisateur a cliqué sur le bouton Annuler . Les informations de la structure PRINTDLGEX sont inchangées.

PD_RESULT_PRINT

L’utilisateur a cliqué sur le bouton Imprimer . La structure PRINTDLGEX contient les informations spécifiées par l’utilisateur.

Notes

Si hDevMode et hDevNames ont la valeur NULL, PrintDlgEx initialise la feuille de propriétés à l’aide de l’imprimante par défaut actuelle. Pour initialiser la feuille de propriétés d’une autre imprimante, utilisez le membre wDeviceOffset de la structure DEVNAMES pour spécifier le nom de l’imprimante.

Notez que le membre dmDeviceName de la structure DEVMODE spécifie également un nom d’imprimante. Toutefois, dmDeviceName est limité à 32 caractères, et le nom wDeviceOffset ne l’est pas. Si les noms wDeviceOffset et dmDeviceName ne sont pas identiques, PrintDlgEx initialise la feuille de propriétés à l’aide de l’imprimante spécifiée par wDeviceOffset.

Si l’indicateur PD_RETURNDEFAULT est défini et que hDevMode et hDevNames ont la valeur NULL, PrintDlgEx utilise les membres hDevNames et hDevMode pour renvoyer des informations sur l’imprimante par défaut actuelle sans afficher la boîte de dialogue.

Pendant l’exécution de PrintDlgEx, les structures DEVMODE et DEVNAMES que vous avez spécifiées dans la structure PRINTDLGEX peuvent ne pas toujours contenir de données actuelles. Pour cette raison, les pages de propriétés spécifiques à l’application ainsi que les routines IPrintDialogCallback pour la page initiale doivent utiliser l’interface IPrintDialogServices pour récupérer des informations sur l’état de l’imprimante actuelle.

Notes

L’en-tête commdlg.h définit PRINTDLGEX comme un alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. Le mélange de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Configuration requise

   
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
En-tête commdlg.h (inclure Windows.h)

Voir aussi

Bibliothèque de boîtes de dialogue commune

Conceptuel

DEVMODE

DEVNAMES

IPrintDialogCallback

IPrintDialogServices

PrintDlgEx

Référence