Boîte de dialogue Imprimer

La boîte de dialogue Imprimer permet à l’utilisateur de sélectionner des options pour un travail d’impression particulier. Par exemple, l’utilisateur peut spécifier l’imprimante à utiliser, la plage de pages à imprimer et le nombre de copies.

Vous pouvez utiliser la fonction PrintDlgEx pour afficher une feuille de propriétés Imprimer, qui comporte une page Général contenant des contrôles similaires à la boîte de dialogue Imprimer . La feuille de propriétés peut également avoir des pages de propriétés supplémentaires spécifiques à l’application et spécifiques au pilote en suivant la page Général .

Vous créez et affichez une boîte de dialogue Imprimer en initialisant une structure PRINTDLG et en transmettant la structure à la fonction PrintDlg .

L’illustration suivante montre une boîte de dialogue Imprimer classique.

print dialog box

Si l’utilisateur clique sur le bouton OK , PrintDlg retourne TRUE et utilise la structure PRINTDLG pour renvoyer des informations sur les sélections de l’utilisateur. Par exemple, les membres hDevMode et hDevNames retournent généralement des handles de mémoire globale pour et des structures DEVNAMES . Vous pouvez utiliser les informations de ces structures pour créer un contexte d’appareil ou un contexte d’informations pour l’imprimante sélectionnée.

Si l’utilisateur annule la boîte de dialogue Imprimer ou qu’une erreur se produit, PrintDlg renvoie FALSE. Vous pouvez déterminer la cause d’une erreur à l’aide de la fonction CommDlgExtendedError pour récupérer la valeur d’erreur étendue.

La boîte de dialogue Imprimerinclut un groupe de cases d’option qui indiquent si l’utilisateur souhaite imprimer toutes les pages, une plage de pages ou uniquement le texte sélectionné. Avant d’appeler PrintDlg, vous pouvez définir l’un des indicateurs PD_ALLPAGES, PD_SELECTION ou PD_PAGENUMS pour indiquer le bouton initialement sélectionné. Lorsque PrintDlg retourne TRUE, la fonction définit l’un de ces indicateurs pour indiquer les sélections de l’utilisateur. Si PD_PAGENUMS est défini, les membres nFromPage et nToPage de la structure PRINTDLG contiennent les pages de début et de fin spécifiées par l’utilisateur. Pour désactiver la case d’option Pages et ses contrôles From et To Edit associés, définissez l’indicateur PD_NOPAGENUMS . Pour désactiver la case d’option Sélection , définissez l’indicateur PD_NOSELECTION .

La boîte de dialogue inclut un contrôle d’édition dans lequel l’utilisateur peut taper le nombre de copies à imprimer. Si le membre hDevMode de la structure PRINTDLG n’est pas NULL, le membre dmCopies de la structure spécifie la valeur initiale de ce contrôle d’édition. Si hDevMode a la valeur NULL, le membre nCopies de la structure PRINTDLG spécifie la valeur initiale. Lorsque PrintDlg est retourné, nCopies indique généralement le nombre de copies spécifiées par l’utilisateur. Toutefois, si vous définissez l’indicateur PD_USEDEVMODECOPIESANDCOLLATE lorsque vous créez la boîte de dialogue, nCopies est toujours défini sur 1 lors du retour et le membre dmCopies de DEVMODE indique le nombre de copies à imprimer.

La case à cocher Collate indique si l’utilisateur souhaite assembler les pages si plusieurs copies sont imprimées. L’indicateur PD_COLLATE est défini si la case à cocher Collate est activée. Si votre application ne prend pas en charge plusieurs copies ou classement simulés, définissez l’indicateur PD_USEDEVMODECOPIESANDCOLLATE dans le membre Indicateurs de la structure PRINTDLG . Cette opération désactive la case à cocher Collate et le contrôle Nombre de copies d’édition, sauf si le pilote d’imprimante prend en charge plusieurs copies et classements.

La case à cocher Imprimer dans le fichier indique si l’utilisateur souhaite envoyer une sortie à un fichier plutôt qu’à une imprimante. Vous pouvez définir l’indicateur PD_PRINTTOFILE afin que la case à cocher soit initialement cochée. Pour masquer la case à cocher, définissez l’indicateur PD_HIDEPRINTTOFILE . Pour le désactiver, définissez l’indicateur PD_DISABLEPRINTTOFILE . Si l’utilisateur sélectionne l’option Imprimer dans le fichier , PrintDlg définit l’indicateur PD_PRINTTOFILE et retourne « FILE: » au décalage indiqué par le membre wOutputOffset de la structure DEVNAMES . Lorsque vous appelez la fonction pour démarrer l’opération d’impression, spécifiez cette chaîne « FILE: » dans le membre lpszOutput de la structure. Si vous spécifiez cette chaîne, le sous-système d’impression interroge l’utilisateur pour le nom du fichier de sortie.

Par défaut, la boîte de dialogue Imprimer affiche initialement des informations sur l’imprimante par défaut actuelle. Pour afficher des informations pour une autre imprimante installée, initialisez une structure DEVNAMES et affectez le handle de mémoire globale à la structure aux membres hDevMode et hDevNames . Le nom de l’appareil que vous spécifiez dans le membre dmDeviceName de la structure DEVMODE et dans le membre wDriverOffset de la structure DEVNAMES doit identifier un périphérique d’imprimante qui est également répertorié dans la section [Appareils] du fichier Win.ini. Si l’appareil n’est pas répertorié, PrintDlg renvoie une erreur.

Vous pouvez diriger PrintDlg pour créer un contexte d’appareil ou un contexte d’informations pour l’imprimante en définissant l’indicateur PD_RETURNDC ou PD_RETURNIC dans le membre Indicateurs de la structure PRINTDLG . La fonction retourne un handle au contexte de l’appareil ou au contexte d’informations dans le membre hDC . Si vous utilisez l’indicateur PD_RETURNDC , vous pouvez utiliser le contexte de l’appareil pour générer la sortie de l’imprimante.

Pour récupérer des informations sur l’imprimante par défaut sans afficher la boîte de dialogue Imprimer , définissez l’indicateur PD_RETURNDEFAULT . Dans ce cas, PrintDlg retourne immédiatement après avoir défini les membres hDevMode et hDevNames pour gérer les structures contenant les informations.

Par défaut, PrintDlg affiche les boîtes de message lorsque des erreurs se produisent. Par exemple, la fonction affiche un message d’erreur si aucune imprimante n’est installée. Pour empêcher la fonction d’afficher ces messages d’avertissement, définissez l’indicateur PD_NOWARNING .

Les rubriques suivantes sont abordées dans cette section.

Personnalisation de la boîte de dialogue Imprimer

Vous pouvez fournir un modèle personnalisé pour la boîte de dialogue Imprimer , par exemple, si vous souhaitez inclure des contrôles supplémentaires propres à votre application. La fonction PrintDlg utilise votre modèle personnalisé à la place du modèle par défaut.

Pour fournir un modèle personnalisé pour la boîte de dialogue Imprimer :

  1. Créez le modèle personnalisé en modifiant le modèle par défaut spécifié dans le fichier Prnsetup.dlg. Les identificateurs de contrôle utilisés dans le modèle de boîte de dialogue d’impression par défaut sont définis dans le fichier Dlgs.h.
  2. Utilisez la structure PRINTDLG pour activer le modèle comme suit :
    • Si votre modèle personnalisé est une ressource dans une application ou une bibliothèque de liens dynamiques, définissez l’indicateur PD_ENABLEPRINTTEMPLATE dans le membre Indicateurs . Utilisez les membres hInstance et lpPrintTemplateName de la structure pour identifier le module et le nom de la ressource.

      -Ou-

    • Si votre modèle personnalisé est déjà en mémoire, définissez l’indicateur PD_ENABLEPRINTTEMPLATEHANDLE . Utilisez le membre hPrintTemplate pour identifier l’objet mémoire qui contient le modèle.

Vous pouvez fournir une procédure hook PrintHookProc pour la boîte de dialogue Imprimer. La procédure hook peut traiter les messages envoyés à la boîte de dialogue. Il peut également envoyer des messages à la boîte de dialogue. Si vous utilisez un modèle personnalisé pour définir des contrôles supplémentaires, vous devez fournir une procédure hook pour traiter les entrées de vos contrôles.

Pour activer une procédure hook pour la boîte de dialogue Imprimer :

  1. Définissez l’indicateur PD_ENABLEPRINTHOOK dans le membre Indicateurs de la structure PRINTDLG .
  2. Spécifiez l’adresse de la procédure hook dans le membre lpfnPrintHook.

Après avoir traité son message WM_INITDIALOG, la procédure de boîte de dialogue envoie un message WM_INITDIALOG à la procédure hook. Le paramètre lParam de ce message est un pointeur vers la structure PRINTDLG utilisée pour initialiser la boîte de dialogue.

Vous pouvez créer et afficher une boîte de dialogue Configuration d’impression en définissant l’indicateur PD_PRINTSETUP dans un appel à la fonction PrintDlg . Toutefois, la boîte de dialogue Configuration de l’impression a été remplacée par la boîte de dialogue Mise en page et ne doit pas être utilisée dans les nouvelles applications.

Les indicateurs suivants s’appliquent uniquement à la boîte de dialogue Configuration de l’impression :

  • PD_ENABLESETUPHOOK
  • PD_ENABLESETUPTEMPLATE
  • PD_ENABLESETUPTEMPLATEHANDLE