Architecture d'aperçu avant impression
Cet article explique l'infrastructure MFC implémente la fonctionnalité d'aperçu avant impression.Les rubriques traitées ici sont les suivantes :
Processus d'aperçu avant impression
Modifier l'aperçu avant impression
L'aperçu avant impression est quelque peu différent de l'écran et de l'impression parce que, au lieu de dessiner directement une image sur un périphérique, l'application doit simuler l'imprimante à l'écran.Pour ce faire, la bibliothèque MFC définit une classe (non documentée) spéciale dérivée de CDC, classe, CPreviewDCappelé.Tous les objets d' CDC contiennent deux contextes de périphérique, mais généralement elles sont identiques.Dans un objet de CPreviewDC , ils sont différents : le premier représente l'imprimante est simulée, et le second représente l'écran sur lequel la sortie est affichée réellement.
Le processus d'aperçu avant impression
Lorsque l'utilisateur sélectionne la commande d'aperçu avant impression dans le menu de Fichier , l'infrastructure crée un objet de CPreviewDC .Chaque fois que votre application exécute une opération qui définit une caractéristique du contexte de périphérique d'imprimante, l'infrastructure effectue également une opération similaire dans le contexte de périphérique.Par exemple, si votre application sélectionne une police pour l'impression, l'infrastructure sélectionne une police de l'écran qui simule la police d'imprimante.Chaque fois que votre application enverrait la sortie vers l'imprimante, l'infrastructure envoie la sortie à l'écran.
L'aperçu avant impression diffère également de l'impression dans l'ordre que chacun dessine des pages d'un document.Pendant l'impression, l'infrastructure reprend une boucle d'impression jusqu'à ce qu'une certaine plage des pages a été rendue.Pendant l'aperçu avant impression, un ou deux pages sont affichées à tout moment, puis l'application attend ; aucune autre page n'est affichée tant que l'utilisateur répond.Pendant l'aperçu avant impression, l'application doit également répondre aux messages d' WM_PAINT , comme elle effectue pendant l'écran ordinaire.
La fonction d' CView::OnPreparePrinting est appelée lorsque le mode d'aperçu est appelée, comme il est au début d'un travail d'impression.La structure de CPrintInfo, structure passée à la fonction contient plusieurs membres que vous pouvez définir pour ajuster certaines caractéristiques de l'opération d'aperçu avant impression.Par exemple, vous pouvez définir le membre de m_nNumPreviewPages pour spécifier si vous souhaitez visionner le document en mode d'une page ou de deux pages.
Modifier l'aperçu avant impression
Vous pouvez modifier le comportement et l'apparence de l'aperçu avant impression de plusieurs manières plutôt facilement.Par exemple, vous pouvez, notamment :
Faites pour afficher la fenêtre d'aperçu avant impression une barre de défilement pour faciliter l'accès à toute page du document.
Aperçu avant impression ont pour maintenir la position de l'utilisateur dans le document en démarrant son affichage à la page actuelle.
Génèrent l'initialisation différente à effectuer pour l'aperçu avant impression et l'impression.
Génèrent l'aperçu avant impression aux numéros de page d'affichage dans vos propres formats.
Si vous connaissez la durée pendant laquelle le document est et appelle SetMaxPage avec la valeur appropriée, l'infrastructure peut utiliser ces informations en mode aperçu ainsi que pendant l'impression.Une fois que l'infrastructure connaît la longueur du document, il peut fournir à la fenêtre d'aperçu une barre de défilement, ce qui permet à l'utilisateur de la pagination dans les deux sens dans le document en mode aperçu.Si vous n'avez pas défini la longueur du document, l'infrastructure ne peut pas positionner la case de défilement pour indiquer la position actuelle, l'infrastructure n'ajoute pas de barre de défilement.Dans ce cas, l'utilisateur doit utiliser les boutons de page suivante et de page précédente dans la barre de contrôles de la fenêtre d'aperçu pour parcourir le document.
Pour l'aperçu avant impression, vous pouvez trouver utile pour assigner une valeur au membre d' m_nCurPage d' CPrintInfo, même si vous n'aurez ainsi jamais pour l'impression ordinaire.Pendant l'impression ordinaire, ce membre achemine des informations de l'infrastructure à votre classe d'affichage.Voici comment l'infrastructure indique à la vue ce que la page doit être imprimée.
En revanche, lorsque le mode d'aperçu avant impression est démarré, le membre d' m_nCurPage achemine des informations dans le sens inverse : de la vue à l'infrastructure.L'infrastructure utilise la valeur de ce membre pour déterminer la page doit s'afficher un aperçu d'abord.La valeur par défaut de ce membre est 1, donc la première page du document s'affiche initialement.Vous pouvez substituer OnPreparePrinting pour définir ce membre dans le numéro de la page affichée lorsque la commande d'aperçu avant impression a été appelée.De cette façon, l'application conserve la position actuelle de l'utilisateur en déplaçant le mode d'affichage normal en mode aperçu avant impression.
Vous pouvez parfois souhaiter OnPreparePrinting pour effectuer le différents selon que d'initialisation qu'il est appelé pour un travail d'impression ou pour l'aperçu avant impression.Vous pouvez déterminer ceci en examinant la variable de membre m_bPreview dans la structure d' CPrintInfo .Ce membre est défini à TRUE lorsque l'aperçu avant impression est appelé.
La structure d' CPrintInfo contient également un membre nommé m_strPageDesc, qui est utilisé pour mettre en forme les chaînes affichent en bas de l'écran dans les modes d'une seule page et de pages.Par défaut ces chaînes sont la page « n » de formulaire et « pages n - m », mais vous pouvez modifier m_strPageDesc d' OnPreparePrinting et définir des chaînes par un nom plus élaborée.Consultez CPrintInfo, structure dans MFC Reference pour plus d'informations.