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 d’impression, qui a une page Général contenant des contrôles similaires à la boîte de dialogue Imprimer . La feuille de propriétés peut également contenir des pages de propriétés supplémentaires spécifiques à l’application et au pilote après 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.

boîte de dialogue imprimer

Si l’utilisateur clique sur le bouton OK , PrintDlg renvoie 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 les structures DEVNAMES et . 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 si 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 Imprimer inclut un groupe de cases d’option Plage d’impression 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 sélectionné initialement. 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 les contrôles De et Pour modifier 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 retourne, 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 au retour et le membre dmCopies de DEVMODE indique le nombre de copies à imprimer.

La zone Coller case activée indique si l’utilisateur souhaite rassembler les pages si plusieurs copies sont imprimées. L’indicateur PD_COLLATE est défini si la zone Case activée de regroupement est sélectionnée. Si votre application ne prend pas en charge plusieurs copies ou un classement simulé, définissez l’indicateur PD_USEDEVMODECOPIESANDCOLLATE dans le membre Indicateurs de la structure PRINTDLG . Cela désactive la zone Case activée collez et le contrôle d’édition Nombre de copies, sauf si le pilote d’imprimante prend en charge plusieurs copies et classement.

La zone d’case activée Imprimer dans un fichier indique si l’utilisateur souhaite envoyer la sortie à un fichier plutôt qu’à une imprimante. Vous pouvez définir l’indicateur PD_PRINTTOFILE afin que la zone case activée soit initialement sélectionnée. Pour masquer la zone case activée, 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 un 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 obtenir 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 les informations d’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 [Périphériques] du fichier Win.ini. Si l’appareil n’est pas répertorié, PrintDlg retourne une erreur.

Vous pouvez demander à PrintDlg de 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 d’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 sur des handles pour les structures contenant les informations.

Par défaut, PrintDlg affiche les zones 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 traité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 Imprimer 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 de hook PrintHookProc pour la boîte de dialogue Imprimer . La procédure de raccordement 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 de raccordement pour traiter l’entrée de vos contrôles.

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

  1. Définissez l’indicateur PD_ENABLEPRINTHOOK dans le membre Flags de la structure PRINTDLG .
  2. Spécifiez l’adresse de la procédure de raccordement 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 de raccordement. 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 de l’impression en définissant l’indicateur PD_PRINTSETUP dans un appel à la fonction PrintDlg . Toutefois, la boîte de dialogue Configuration d’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