Partager via


Architecture d’aperçu avant impression

Cet article explique comment l’infrastructure MFC implémente les fonctionnalités d’aperçu avant impression. Sont abordés les sujets suivants :

L’aperçu avant impression est légèrement différent de l’affichage de l’écran et de l’impression, car au lieu de dessiner directement une image sur un appareil, l’application doit simuler l’imprimante à l’aide de l’écran. Pour ce faire, la bibliothèque de classes Microsoft Foundation définit une classe spéciale (non documentée) dérivée de la classe CDC, appelée CPreviewDC. Tous les CDC objets contiennent deux contextes d’appareil, mais généralement ils sont identiques. Dans un CPreviewDC objet, ils sont différents : le premier représente l’imprimante simulée, et le second représente l’écran sur lequel la sortie est réellement affichée.

Processus d’aperçu avant impression

Lorsque l’utilisateur sélectionne la commande Aperçu avant impression dans le menu Fichier , l’infrastructure crée un CPreviewDC objet. Chaque fois que votre application effectue une opération qui définit une caractéristique du contexte d’appareil d’imprimante, l’infrastructure effectue également une opération similaire sur le contexte de l’appareil à l’écran. Par exemple, si votre application sélectionne une police pour l’impression, l’infrastructure sélectionne une police pour l’écran qui simule la police d’imprimante. Chaque fois que votre application envoie une sortie à l’imprimante, l’infrastructure envoie plutôt la sortie à l’écran.

L’aperçu avant impression diffère également de l’impression dans l’ordre dans lequel chacun dessine les pages d’un document. Pendant l’impression, l’infrastructure continue une boucle d’impression jusqu’à ce qu’une certaine plage de pages ait été rendue. Pendant l’aperçu avant impression, une ou deux pages sont affichées à tout moment, puis l’application attend ; aucune autre page n’est affichée tant que l’utilisateur ne répond pas. Lors de l’aperçu avant impression, l’application doit également répondre aux messages WM_PAINT, tout comme lors de l’affichage d’écran ordinaire.

La fonction CView ::OnPreparePrinting est appelée lorsque le mode d’aperçu est appelé, tout comme au début d’une tâche d’impression. La structure CPrintInfo transmise à la fonction contient plusieurs membres dont vous pouvez définir les valeurs pour ajuster certaines caractéristiques de l’opération d’aperçu avant impression. Par exemple, vous pouvez définir le membre m_nNumPreviewPages pour spécifier si vous souhaitez afficher un aperçu du document en mode une ou deux pages.

Modification de l’aperçu avant impression

Vous pouvez modifier le comportement et l’apparence de l’aperçu avant impression de plusieurs façons plutôt facilement. Par exemple, vous pouvez, entre autres :

  • La fenêtre d’aperçu avant impression affiche une barre de défilement pour faciliter l’accès à n’importe quelle page du document.

  • Faites en sorte que l’aperçu avant impression conserve la position de l’utilisateur dans le document en commençant son affichage sur la page active.

  • Entraînez l’exécution d’une initialisation différente pour l’aperçu avant impression et l’impression.

  • Faites en sorte que l’aperçu avant impression affiche les numéros de page dans vos propres formats.

Si vous savez combien de temps le document est et appelez 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, elle peut fournir la fenêtre d’aperçu avec une barre de défilement, ce qui permet à l’utilisateur de pager de nouveau et vers le bas 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 zone de défilement pour indiquer la position actuelle. Par conséquent, l’infrastructure n’ajoute pas de barre de défilement. Dans ce cas, l’utilisateur doit utiliser les boutons Page suivante et Page précédente dans la barre de contrôle de la fenêtre d’aperçu pour parcourir le document.

Pour l’aperçu avant impression, il peut être utile d’attribuer une valeur au membre m_nCurPage de CPrintInfo, même si vous ne le feriez jamais pour l’impression ordinaire. Pendant l’impression ordinaire, ce membre transporte des informations de l’infrastructure vers votre classe d’affichage. Il s’agit de la façon dont l’infrastructure indique à la vue quelle page doit être imprimée.

En revanche, lorsque le mode aperçu avant impression est démarré, le membre m_nCurPage porte des informations dans la direction opposée : de l’affichage au framework. L’infrastructure utilise la valeur de ce membre pour déterminer la page à afficher en premier. La valeur par défaut de ce membre est 1, de sorte que la première page du document s’affiche initialement. Vous pouvez remplacer OnPreparePrinting ce membre par le nombre de pages affichées au moment de l’appel de la commande Aperçu avant impression. De cette façon, l’application conserve la position actuelle de l’utilisateur lors du passage du mode d’affichage normal au mode aperçu avant impression.

Parfois, vous pouvez effectuer OnPreparePrinting une initialisation différente selon qu’elle est appelée pour un travail d’impression ou pour l’aperçu avant impression. Vous pouvez le déterminer en examinant la variable membre m_bPreview dans la CPrintInfo structure. Ce membre a la valeur TRUE lorsque l’aperçu avant impression est appelé.

La CPrintInfo structure contient également un membre nommé m_strPageDesc, qui est utilisé pour mettre en forme les chaînes affichées en bas de l’écran en mode monopage et plusieurs pages. Par défaut, ces chaînes sont de la forme « Page n » et « Pages n - m », mais vous pouvez modifier m_strPageDesc à partir de l’intérieur OnPreparePrinting et définir les chaînes sur quelque chose de plus élaboré. Pour plus d’informations, consultez la structure CPrintInfo dans la référence MFC .

Voir aussi

Impression et aperçu avant impression
Impression
CView, classe
CDC, classe