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 :
- Le type de papier (enveloppe, légal, lettre, etc.)
- Source de papier (alimentation manuelle, alimentation de tracteur, chargeur de feuille, etc.)
- Orientation de la page (portrait ou paysage)
- Largeur des marges de la 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 selon les capacités de l’imprimante. L’illustration suivante montre une boîte de dialogue de 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 descripteurs 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 décrit les 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 descripteurs de mémoire globaux 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 pouces, la boîte de dialogue utilise des millièmes de pouce 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 centièmes 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 Flags de la structure PAGESETUPDLG .
Par défaut, les valeurs initiales des marges sont d’un pouce. Si vous définissez l’indicateur de _ marges PSD , la boîte de dialogue affiche les valeurs de marge initiale 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 une combinaison des indicateurs suivants pour désactiver les contrôles correspondants.
| Indicateur | Signification |
|---|---|
| _DISABLEMARGINS PSD | Désactive les contrôles d’édition dans lesquels l’utilisateur entre les paramètres de marge. |
| _DISABLEORIENTATION PSD | Désactive les cases d’option portrait et paysage . |
| _DISABLEPAPER PSD | Désactive les contrôles permettant de sélectionner le format de papier et la source de papier. |
| _DISABLEPRINTER PSD | 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 de 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 d’une application ou d’une bibliothèque de liens dynamiques, définissez l’indicateur PSD _ ENABLEPAGESETUPTEMPLATE dans le membre Flags . 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 la 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é dans la boîte de dialogue mise en page . Pour plus d’informations sur la procédure de hook PagePaintHook , consultez Personnalisation de la page d’exemple.
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 le traitement du message WM _ INITDIALOG , la procédure de la 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 comprend 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é représentant les marges actuelles et des caractères partiels (texte grec) pour afficher l’aspect du texte sur la page imprimée.
Quand vous appelez la fonction PageSetupDlg , vous pouvez fournir une procédure de hook PagePaintHook pour personnaliser l’apparence de la page d’exemple.
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 le contenu de la page d’exemple, la procédure de raccordement reçoit les messages suivants dans l’ordre dans lequel ils sont répertoriés.
| Message | Signification |
|---|---|
| _PAGESETUPDLG WM _ | La boîte de dialogue vous permet de dessiner la page de l’exemple. La procédure de raccordement peut utiliser ce message pour préparer le contenu de la page d’exemple. |
| _FULLPAGERECT WM _ | La boîte de dialogue vous permet de dessiner la page de l’exemple. Ce message spécifie le rectangle englobant de la page d’exemple. |
| _MINMARGINRECT WM _ | La boîte de dialogue vous permet de dessiner la page de l’exemple. Ce message spécifie le rectangle de marge. |
| _MARGINRECT WM _ | La boîte de dialogue est sur le sujet de dessiner le rectangle de marge. |
| _GREEKTEXTRECT WM _ | La boîte de dialogue vous permet de dessiner le texte grec à l’intérieur du rectangle de marge. |
| _ENVSTAMPRECT WM _ | La boîte de dialogue est sur le dessin du rectangle d’enveloppe d’une page d’exemple d’enveloppe. Ce message est envoyé uniquement pour les enveloppes. |
| _YAFULLPAGERECT WM _ | La boîte de dialogue vous permet de dessiner la partie adresse de retour d’une page d’exemple d’enveloppe. Ce message est envoyé pour les enveloppes et autres formats de papier. |
Si la procédure de raccordement retourne la valeur true pour l’un des trois premiers messages d’une séquence de dessin (WM _ PSD _ PAGESETUPDLG, WM _ PSD _ FULLPAGERECTou WM _ PSD _ MINMARGINRECT), la boîte de dialogue n’envoie plus de messages et ne dessine pas dans la page d’exemple tant que le système n’a pas besoin de redessiner la page d’exemple. Si la procédure de hook retourne la valeur 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 raccordement retourne la valeur true pour l’un des messages restants dans une séquence de dessin, la boîte de dialogue ne dessine pas la partie correspondante de la page d’exemple. Si la procédure de raccordement retourne la valeur false pour l’un de ces messages, la boîte de dialogue crée cette partie de la page d’exemple.
Pour empêcher la boîte de dialogue de dessiner le contenu de la page d’exemple, vous pouvez définir l’indicateur PSD _ DISABLEPAGEPAINTING . Cet indicateur n’affecte pas votre procédure de hook PagePaintHook , qui reçoit toujours tous _ les messages _ * WM et peut dessiner le contenu de la page d’exemple.