Structure PRINTDLGA (commdlg.h)

Contient des informations que la fonction PrintDlg utilise pour initialiser la boîte de dialogue Imprimer. Une fois que l’utilisateur a fermé la boîte de dialogue, le système utilise cette structure pour retourner des informations sur les sélections de l’utilisateur.

Syntaxe

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;

Membres

lStructSize

Type : DWORD

Taille de la structure, en octets.

hwndOwner

Type : HWND

Handle de la fenêtre qui possède la boîte de dialogue. Ce membre peut être n’importe quel handle de fenêtre valide, ou il peut être NULL si la boîte de dialogue n’a pas de propriétaire.

hDevMode

Type : HGLOBAL

Handle vers un objet de mémoire globale mobile qui contient une structure DEVMODE . Si hDevMode n’est pas NULL lors de l’entrée, vous devez allouer un bloc de mémoire mobile pour la structure DEVMODE et initialiser ses membres. La fonction PrintDlg utilise les données d’entrée pour initialiser les contrôles dans la boîte de dialogue. Lorsque PrintDlg retourne, les membres DEVMODE indiquent l’entrée de l’utilisateur.

Si hDevMode a la valeur NULL lors de l’entrée, PrintDlg 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.

Si le pilote de périphérique pour l’imprimante spécifiée ne prend pas en charge les modes de périphérique étendus, hDevMode a la valeur NULL lorsque PrintDlg retourne.

Si le nom de l’appareil (spécifié par le membre dmDeviceName de la structure DEVMODE ) n’apparaît pas dans la section [devices] de WIN.INI, PrintDlg renvoie une erreur.

Pour plus d’informations sur les membres hDevMode et hDevNames , consultez la section Notes à 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 PrintDlg utilise les données d’entrée pour initialiser les contrôles dans la boîte de dialogue. Lorsque PrintDlg 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’informations.

Le membre hDevNames peut être NULL, auquel cas PrintDlg 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 Notes à la fin de cette rubrique.

hDC

Type : HDC

Handle pour 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 la priorité.

Flags

Type : DWORD

Initialise la boîte de dialogue Imprimer . Lorsque la boîte de dialogue est retournée, elle définit ces indicateurs pour indiquer l’entrée de l’utilisateur. Ce membre peut être une ou plusieurs des valeurs suivantes.

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 et PD_SELECTION ne sont pas spécifiés.
PD_COLLATE
0x00000010
Si cet indicateur est défini, la zone Case activée est sélectionnée.

Si cet indicateur est défini lorsque la fonction PrintDlg retourne, 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_DISABLEPRINTTOFILE
0x00080000
Désactive la zone d’case activée Imprimer dans un fichier.
PD_ENABLEPRINTHOOK
0x00001000
Active la procédure de raccordement spécifiée dans le membre lpfnPrintHook . Cela active la procédure de raccordement pour la boîte de dialogue Imprimer .
PD_ENABLEPRINTTEMPLATE
0x00004000
Indique que les membres hInstance et lpPrintTemplateName spécifient un remplacement pour le modèle de boîte de dialogue Imprimer par défaut.
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
Indique que le membre hPrintTemplate 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 par défaut de la boîte de dialogue Imprimer . Le système ignore le membre lpPrintTemplateName si cet indicateur est spécifié.
PD_ENABLESETUPHOOK
0x00002000
Active la procédure de raccordement spécifiée dans le membre lpfnSetupHook . Cela active la procédure de raccordement pour la boîte de dialogue Configuration de l’impression .
PD_ENABLESETUPTEMPLATE
0x00008000
Indique que les membres hInstance et lpSetupTemplateName spécifient un remplacement pour le modèle de boîte de dialogue Configuration d’impression par défaut.
PD_ENABLESETUPTEMPLATEHANDLE
0x00020000
Indique que le membre hSetupTemplate 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 par défaut de la boîte de dialogue Configuration de l’impression. Le système ignore le membre lpSetupTemplateName si cet indicateur est spécifié.
PD_HIDEPRINTTOFILE
0x00100000
Masque la zone d’case activée Imprimer dans un fichier.
PD_NONETWORKBUTTON
0x00200000
Masque et désactive le bouton Réseau .
PD_NOPAGENUMS
0x00000008
Désactive la case d’option Pages et les contrôles de modification 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 l’absence d’imprimante par défaut.
PD_PAGENUMS
0x00000002
Si cet indicateur est défini, la case d’option Pages est sélectionnée. Si cet indicateur est défini lorsque la fonction PrintDlg retourne, les membres nFromPage et nToPage indiquent les pages de début et de fin spécifiées par l’utilisateur.
PD_PRINTSETUP
0x00000040
Le système affiche la boîte de dialogue Configuration de l’impression plutôt que la boîte de dialogue Imprimer .
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 la fonction PrintDlg retourne, 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 PrintDlg à renvoyer un contexte d’appareil correspondant aux sélections effectuées par l’utilisateur dans la boîte de dialogue. Le contexte de l’appareil est retourné dans hDC.
PD_RETURNDEFAULT
0x00000400
Si cet indicateur est défini, la fonction PrintDlg n’affiche pas la boîte de dialogue. Au lieu de cela, il définit les membres hDevNames et hDevMode sur les handles sur les structures DEVMODE et DEVNAMES qui sont initialisées pour l’imprimante système par défaut. HDevNames et hDevMode doivent être NULL, ou PrintDlg 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 ni PD_PAGENUMS ni PD_SELECTION n’est défini, la case d’option Tout est sélectionnée.
PD_SHOWHELP
0x00000800
La boîte de dialogue affiche le bouton Aide . Le membre hwndOwner doit spécifier la fenêtre pour recevoir les messages inscrits HELPMSGSTRING que la boîte de dialogue envoie lorsque l’utilisateur clique sur le bouton Aide .
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 PRINTDLG 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 PRINTDLG indique le nombre de copies que l’utilisateur souhaite imprimer, et l’indicateur PD_COLLATE dans le membre Flags 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.

Problème connu sur Windows 2000/XP/2003 : Si cet indicateur n’est pas défini avant d’appeler PrintDlg, PrintDlg peut permuter les valeurs nCopies et dmCopies lorsqu’il est retourné. La solution de contournement de ce problème consiste à utiliser dmCopies si sa valeur est supérieure à 1 ; sinon, utilisez nCopies, pour obtenir le nombre réel de copies à imprimer lorsque PrintDlg retourne.

 

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 a toujours la valeur FALSE.

Pour vous assurer que PrintDlg ou PrintDlgEx renvoie les valeurs correctes dans nCopies et PD_COLLATE, définissez PD_RETURNDC = TRUE et PD_USEDEVMODECOPIESANDCOLLATE = FALSE. Ce faisant, dmCopies est toujours 1 et dmCollate a toujours la valeur FALSE.

Sur Windows Vista et Windows 7, 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.

nFromPage

Type : WORD

Valeur initiale du contrôle de modification de page de démarrage.

Lorsque PrintDlg retourne, nFromPage est la page de départ spécifiée par l’utilisateur. Si la case d’option Pages est sélectionnée lorsque l’utilisateur clique sur le bouton OK , PrintDlg définit l’indicateur de PD_PAGENUMS et ne retourne pas tant que l’utilisateur n’a pas entré une valeur de page de départ comprise dans la plage de pages minimale à maximale.

Si la valeur d’entrée pour nFromPage ou nToPage est en dehors de la plage minimale/maximale, PrintDlg retourne une erreur uniquement si l’indicateur PD_PAGENUMS est spécifié ; sinon, elle affiche la boîte de dialogue, mais remplace la valeur hors limites par la valeur minimale ou maximale.

nToPage

Type : WORD

Valeur initiale du contrôle de modification de page de fin. Lorsque PrintDlg retourne, nToPage est la page de fin spécifiée par l’utilisateur. Si la case d’option Pages est sélectionnée lorsque l’utilisation clique sur le bouton OK , PrintDlg définit l’indicateur PD_PAGENUMS et ne retourne pas tant que l’utilisateur n’a pas entré une valeur de page de fin comprise dans la plage de pages minimale à maximale.

nMinPage

Type : WORD

Valeur minimale pour la plage de pages spécifiée dans les contrôles de modification de page De et De . Si nMinPage est égal à nMaxPage, la case d’option Pages et les contrôles de modification de page de début et de fin sont désactivés.

nMaxPage

Type : WORD

Valeur maximale pour la plage de pages spécifiée dans les contrôles de modification de page De et De .

nCopies

Type : WORD

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 PrintDlg est retourné, nCopies contient le nombre réel de copies à 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 ou PD_ENABLESETUPTEMPLATE 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 ou lpSetupTemplateName.

lCustData

Type : LPARAM

Données définies par l’application que le système transmet à la procédure de raccordement identifiée par le membre lpfnPrintHook ou lpfnSetupHook . Lorsque le système envoie le message WM_INITDIALOG à la procédure de raccordement, le paramètre lParam du message est un pointeur vers la structure PRINTDLG spécifiée lors de la création du dialogue. La procédure de raccordement peut utiliser ce pointeur pour obtenir la valeur lCustData .

lpfnPrintHook

Type : LPPRINTHOOKPROC

Pointeur vers une procédure de hook PrintHookProc qui peut traiter les messages destinés à la boîte de dialogue Imprimer . Ce membre est ignoré, sauf si l’indicateur PD_ENABLEPRINTHOOK est défini dans le membre Indicateurs .

lpfnSetupHook

Type : LPSETUPHOOKPROC

Pointeur vers une procédure de hook SetupHookProc qui peut traiter les messages destinés à la boîte de dialogue Configuration de l’impression. Ce membre est ignoré, sauf si l’indicateur PD_ENABLESETUPHOOK est défini dans le membre Indicateurs .

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 Imprimer par défaut. Ce membre est ignoré, sauf si l’indicateur PD_ENABLEPRINTTEMPLATE est défini dans le membre Indicateurs .

lpSetupTemplateName

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 Configuration d’impression par défaut. Ce membre est ignoré, sauf si l’indicateur PD_ENABLESETUPTEMPLATE est défini dans le membre Indicateurs .

hPrintTemplate

Type : HGLOBAL

Si l’indicateur PD_ENABLEPRINTTEMPLATEHANDLE est défini dans le membre Flags , hPrintTemplate est un handle pour un objet mémoire contenant un modèle de boîte de dialogue. Ce modèle remplace le modèle de boîte de dialogue Imprimer par défaut.

hSetupTemplate

Type : HGLOBAL

Si l’indicateur PD_ENABLESETUPTEMPLATEHANDLE est défini dans le membre Flags , hSetupTemplate est un handle pour un objet mémoire contenant un modèle de boîte de dialogue. Ce modèle remplace le modèle de boîte de dialogue Configuration d’impression par défaut.

Remarques

Si hDevMode et hDevNames ont la valeur NULL, PrintDlg initialise la boîte de dialogue à l’aide de l’imprimante par défaut actuelle. Pour initialiser la boîte de dialogue 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, PrintDlg initialise la boîte de dialogue à l’aide de l’imprimante spécifiée par wDeviceOffset.

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

Notes

L’en-tête commdlg.h définit PRINTDLG 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

PrintDlg

Référence

WM_INITDIALOG