Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La quasi-totalité des dessins dans votre application s'effectue dans la fonction membre OnDraw
de la vue, que vous devez remplacer dans votre classe de vue. (La seule exception concerne le dessin à la souris, abordé dans la section Interprétation de l'entrée utilisateur via une vue.) Votre remplacement de OnDraw
:
Récupère les données en appelant les fonctions membres du document que vous fournissez.
Affiche les données en appelant les fonctions membres d'un objet de contexte de périphérique que le framework transmet à
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 de se mettre à jour. UpdateAllViews
appelle la fonction membre OnUpdate de chaque vue. L’implémentation par défaut de OnUpdate
invalide l’ensemble de la zone cliente de la vue. Vous pouvez le redéfinir pour invalider uniquement les régions de la zone cliente qui correspondent 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 de « suggestion » vous permet de limiter la zone que la vue doit redessiner. OnUpdate
accepte deux arguments de type « 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 contexte de périphérique de la classe CPaintDC et appelle la fonction membre OnDraw
de votre vue. Vous n'avez normalement pas besoin d'écrire une fonction de gestionnaire OnPaint
de remplacement.
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 de périphérique. Pour dessiner à l’écran, OnDraw
reçoit un objet CPaintDC
. Pour dessiner sur une imprimante, il reçoit un objet CDC configuré pour l’imprimante actuelle.
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 affiche n'importe quelle chaîne provenant du document, centrée dans la vue. Si l'appel concerne le dessin d'écran, l'objet transmis dans OnDraw
est un CDC
dont le constructeur a déjà appelé . Les appels aux fonctions de dessin sont effectués via le pointeur de contexte de l’appareil. Pour plus d'informations sur les contextes de périphérique et les appels de dessin, consultez la classe CDC dans la référence MFC et Travailler avec les objets de fenêtre.
Pour plus d’exemples d’écriture OnDraw
, consultez les exemples MFC.