Boîte de dialogue Mise en page
Affiche une boîte de dialogue modale qui permet à l’utilisateur de définir les attributs suivants de la page imprimée :
- Type de papier (enveloppe, juridique, lettre, et ainsi de suite)
- La source de papier (alimentation manuelle, alimentation de tracteur, chargeur de feuilles, et ainsi de suite)
- Orientation de la page (portrait ou paysage)
- Largeur des marges de page
Vous créez et affichez une boîte de dialogue Mise en page en initialisant une structure PAGESETUPDLG et en transmettant la structure à la fonction PageSetupDlg . Toutefois, les attributs présentés dans la boîte de dialogue varient en fonction des fonctionnalités de l’imprimante. L’illustration suivante montre une boîte de dialogue Mise en page classique.
Si l’utilisateur clique sur le bouton OK , PageSetupDlg retourne TRUE après avoir défini différents membres dans la structure PAGESETUPDLG pour spécifier les sélections de l’utilisateur. Les membres ptPaperSize et rtMargin contiennent les valeurs spécifiées par l’utilisateur. Les membres hDevMode et hDevNames contiennent des handles de mémoire globaux pour les structures DEVMODE et DEVNAMES . Ces structures contiennent des informations de page supplémentaires, ainsi que des informations sur l’imprimante. Vous pouvez utiliser ces informations pour préparer la sortie à envoyer à l’imprimante sélectionnée.
Si l’utilisateur annule la boîte de dialogue Mise en page ou si une erreur se produit, PageSetupDlg retourne FALSE. Pour déterminer la cause de l’erreur, appelez la fonction CommDlgExtendedError pour récupérer la valeur d’erreur étendue.
Cette section traite des rubriques suivantes.
- Initialisation de la boîte de dialogue Mise en page
- Personnalisation de la boîte de dialogue Mise en page
- Personnalisation de l’exemple de page
Initialisation de la boîte de dialogue Mise en page
Par défaut, la boîte de dialogue Mise en page affiche des informations sur l’imprimante par défaut actuelle. Pour indiquer à la boîte de dialogue d’afficher des informations sur une imprimante spécifique, définissez les membres d’une structure DEVMODE ou DEVNAMES et affectez les handles de mémoire globale de ces structures au membre correspondant dans PAGESETUPDLG. Si vous spécifiez le nom d’une imprimante qui n’est pas installée actuellement, la boîte de dialogue affiche un message d’erreur. Pour empêcher la boîte de dialogue d’afficher des messages d’erreur, utilisez la valeur PSD_NOWARNING . Pour récupérer des informations sur l’imprimante par défaut sans afficher la boîte de dialogue Mise en page , utilisez la valeur PSD_RETURNDEFAULT .
Si le système de mesure par défaut est de pouces, la boîte de dialogue utilise des millièmes de pouces comme unité de mesure par défaut. Si le système de mesure par défaut est métrique, la boîte de dialogue utilise des centaines de millimètres comme unité de mesure par défaut. Pour remplacer l’unité de mesure par défaut, définissez l’indicateur PSD_INHUNDREDTHSOFMILLIMETERS ou PSD_INTHOUSANDTHSOFINCHES dans le membre Indicateurs de la structure PAGESETUPDLG .
Par défaut, les valeurs initiales des marges sont d’un pouce. Si vous définissez l’indicateur PSD_MARGINS , la boîte de dialogue affiche les valeurs de marge initiales spécifiées dans le membre rtMargin . Les valeurs minimales par défaut que l’utilisateur peut spécifier pour les marges sont les marges minimales autorisées par l’imprimante. Si vous définissez l’indicateur PSD_MINMARGINS , la boîte de dialogue applique les marges minimales spécifiées dans le membre rtMinMargin .
Pour empêcher les utilisateurs de sélectionner certaines options, définissez n’importe quelle combinaison des indicateurs suivants pour désactiver les contrôles correspondants.
Indicateur | Signification |
---|---|
PSD_DISABLEMARGINS | Désactive les contrôles de modification dans lesquels l’utilisateur entre les paramètres de marge. |
PSD_DISABLEORIENTATION | Désactive les cases d’option Portrait et Paysage . |
PSD_DISABLEPAPER | Désactive les contrôles permettant de sélectionner le format du papier et la source du papier. |
PSD_DISABLEPRINTER | Désactive le bouton Imprimante . |
Personnalisation de la boîte de dialogue Mise en page
Vous pouvez fournir un modèle personnalisé pour la boîte de dialogue Mise en page, par exemple, si vous souhaitez inclure des contrôles supplémentaires propres à votre application. La fonction PageSetupDlg 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 Mise en page
- 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 Mise en page par défaut sont définis dans le fichier Dlgs.h.
- Utilisez la structure PAGESETUPDLG 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 PSD_ENABLEPAGESETUPTEMPLATE dans le membre Indicateurs . Utilisez les membres hInstance et lpPageSetupTemplateName de la structure pour identifier le nom du module et de la ressource.
-Ou-
Si votre modèle personnalisé est déjà en mémoire, définissez l’indicateur PSD_ENABLEPAGESETUPTEMPLATEHANDLE . Utilisez le membre hPageSetupTemplate pour identifier l’objet mémoire qui contient le modèle.
-
Pour filtrer les messages envoyés à la procédure de boîte de dialogue, vous pouvez fournir une procédure de hook PageSetupHook . Si vous utilisez un modèle personnalisé pour définir des contrôles supplémentaires, vous devez fournir une procédure de hook PageSetupHook pour traiter l’entrée de vos contrôles. En outre, vous pouvez fournir une procédure de hook PagePaintHook pour personnaliser le contenu de l’exemple de page affiché par la boîte de dialogue Mise en page . Pour plus d’informations sur la procédure de hook PagePaintHook , consultez Personnalisation de l’exemple de page.
Pour activer une procédure de hook PageSetupHook
- Définissez l’indicateur PSD_ENABLEPAGESETUPHOOK dans le membre Flags de la structure PAGESETUPDLG .
- Spécifiez l’adresse de la procédure de raccordement dans le membre lpfnPageSetupHook .
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 hook PageSetupHook . Le paramètre lParam de ce message est un pointeur vers la structure PAGESETUPDLG utilisée pour initialiser la boîte de dialogue.
Personnalisation de l’exemple de page
La boîte de dialogue Mise en page inclut une image d’un exemple de page qui montre comment les sélections de l’utilisateur affectent l’apparence de la sortie imprimée. L’image se compose d’un rectangle qui représente le type de papier ou d’enveloppe sélectionné, avec un rectangle en pointillés représentant les marges actuelles et des caractères partiels (texte grec) pour montrer à quoi ressemble le texte sur la page imprimée.
Lorsque vous appelez la fonction PageSetupDlg , vous pouvez fournir une procédure de hook PagePaintHook pour personnaliser l’apparence de l’exemple de page.
Pour activer une procédure de hook PagePaintHook
- Définissez l’indicateur PSD_ENABLEPAGEPAINTHOOK dans le membre Flags de la structure PAGESETUPDLG .
- Spécifiez l’adresse de la procédure de raccordement dans le membre lpfnPagePaintHook .
Chaque fois que la boîte de dialogue est sur le point de dessiner le contenu de l’exemple de page, la procédure de raccordement reçoit les messages suivants dans l’ordre dans lequel ils sont répertoriés.
Message | Signification |
---|---|
WM_PSD_PAGESETUPDLG | La boîte de dialogue est sur le point de dessiner l’exemple de page. La procédure de raccordement peut utiliser ce message pour préparer le dessin du contenu de l’exemple de page. |
WM_PSD_FULLPAGERECT | La boîte de dialogue est sur le point de dessiner l’exemple de page. Ce message spécifie le rectangle englobant de l’exemple de page. |
WM_PSD_MINMARGINRECT | La boîte de dialogue est sur le point de dessiner l’exemple de page. Ce message spécifie le rectangle de marge. |
WM_PSD_MARGINRECT | La boîte de dialogue est sur le point de dessiner le rectangle de marge. |
WM_PSD_GREEKTEXTRECT | La boîte de dialogue est sur le point de dessiner le texte grec à l’intérieur du rectangle de marge. |
WM_PSD_ENVSTAMPRECT | La boîte de dialogue est sur le point de dessiner dans le rectangle d’empreinte d’enveloppe d’une page d’exemple d’enveloppe. Ce message est envoyé uniquement pour les enveloppes. |
WM_PSD_YAFULLPAGERECT | La boîte de dialogue est sur le point de dessiner la partie d’adresse de retour d’un exemple de page d’enveloppe. Ce message est envoyé pour les enveloppes et autres formats de papier. |
Si la procédure de crochet renvoie TRUE pour l’un des trois premiers messages d’une séquence de dessin (WM_PSD_PAGESETUPDLG, WM_PSD_FULLPAGERECT ou WM_PSD_MINMARGINRECT), la boîte de dialogue n’envoie plus de messages et ne dessine pas dans l’exemple de page jusqu’à la prochaine fois que le système doit redessiner l’exemple de page. Si la procédure de crochet retourne FALSE pour les trois messages, la boîte de dialogue envoie les messages restants de la séquence de dessin.
Si la procédure de hook retourne TRUE pour l’un des messages restants d’une séquence de dessin, la boîte de dialogue ne dessine pas la partie correspondante de l’exemple de page. Si la procédure de crochet retourne FALSE pour l’un de ces messages, la boîte de dialogue dessine cette partie de l’exemple de page.
Pour empêcher la boîte de dialogue de dessiner le contenu de l’exemple de page, vous pouvez définir l’indicateur PSD_DISABLEPAGEPAINTING . Cet indicateur n’affecte pas votre procédure de crochet PagePaintHook , qui reçoit toujours tous les messages WM_PSD_* et peut dessiner le contenu de l’exemple de page.