Partager via


Dessin dans une vue

Presque tous les dessins de votre application se produisent dans la fonction membre de OnDraw la vue, que vous devez remplacer dans votre classe d’affichage. (L’exception est le dessin de la souris, abordé dans Interprétation de l’entrée de l’utilisateur par le biais d’une vue.) Votre OnDraw remplacement :

  1. Obtient des données en appelant les fonctions membres du document que vous fournissez.

  2. Affiche les données en appelant des fonctions membres d’un objet de contexte d’appareil que l’infrastructure passe à OnDraw.

Lorsque les données d’un document changent d’une certaine manière, la vue doit être redessinée pour refléter les modifications. En règle générale, cela se produit lorsque l’utilisateur effectue une modification par le biais d’une vue sur le document. Dans ce cas, la vue appelle la fonction membre UpdateAllViews du document pour notifier toutes les vues du même document pour se mettre à jour. UpdateAllViewsappelle la fonction membre OnUpdate de chaque vue. L’implémentation par défaut invalide OnUpdate l’ensemble de la zone cliente de la vue. Vous pouvez le remplacer pour invalider uniquement les régions de la zone cliente qui mappent aux parties modifiées du document.

La UpdateAllViews fonction membre de la classe CDocument et la OnUpdate fonction membre de la classe CView vous permettent de transmettre des informations décrivant les parties du document qui ont été modifiées. Ce mécanisme « hint » vous permet de limiter la zone que la vue doit redessiner. OnUpdate prend deux arguments « hint ». Le premier, lHint, de type LPARAM, vous permet de passer toutes les données que vous aimez, tandis que le second, pHint, de type CObject*, vous permet de passer un pointeur vers n’importe quel objet dérivé de CObject.

Lorsqu’une vue devient non valide, Windows l’envoie un message WM_PAINT . La fonction de gestionnaire OnPaint de la vue répond au message en créant un objet de contexte d’appareil de la classe CPaintDC et en appelant la fonction membre de OnDraw votre vue. Normalement, vous n’avez pas besoin d’écrire une fonction de gestionnaire substituée OnPaint .

Un contexte d’appareil est une structure de données Windows qui contient des informations sur les attributs de dessin d’un appareil, tels qu’un affichage ou une imprimante. Tous les appels de dessin sont effectués via un objet de contexte d’appareil. Pour dessiner à l’écran, OnDraw un objet est passé CPaintDC . Pour dessiner sur une imprimante, il est passé un objet CDC configuré pour l’imprimante active.

Votre code de dessin dans la vue récupère d’abord un pointeur vers le document, puis effectue des appels de dessin via le contexte de l’appareil. L’exemple simple OnDraw suivant illustre le processus :

void CMyView::OnDraw(CDC* pDC)
{
   CMyDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   CString s = pDoc->GetData();   // Returns a CString
   CRect rect;
   GetClientRect(&rect);

   pDC->SetTextAlign(TA_BASELINE | TA_CENTER);
   pDC->TextOut(rect.right / 2, rect.bottom / 2, s, s.GetLength());
}

Dans cet exemple, vous définissez la GetData fonction en tant que membre de votre classe de document dérivée.

L’exemple imprime la chaîne qu’elle obtient à partir du document, centrée dans l’affichage. Si l’appel concerne le dessin d’écran, l’objet passé dans pDC est un CPaintDC constructeur dont le CDC OnDraw constructeur a déjà appelé BeginPaint. Les appels aux fonctions de dessin sont effectués via le pointeur de contexte de l’appareil. Pour plus d’informations sur les contextes d’appareil et les appels de dessin, consultez capture de données modifiées de classe dans la référence MFC et utilisation des objets Window.

Pour plus d’exemples d’écriture OnDraw, consultez les exemples MFC.

Voir aussi

Utilisation de vues