0
votes

Pourquoi appeler invalidaterect () dans wm_paint message?

Je vais donc apprendre Windows API avec livre "Programmation Windows - Charles Petzold (5ème édition)". Si je comprends bien, lors de la manipulation de la fonction d'appel de message WM_Paint Débutation () Validate la zone donnée à la mise à jour. Toutefois, dans ce livre (page 145 pour la version PDF ou page 128 dans la version imprimée), vous pouvez voir ce code:

case WM_PAINT:
          InvalidateRect (hwnd, NULL, TRUE) ;   // what does this line do?
          hdc = BeginPaint (hwnd, &ps) ;
          DrawBezier (hdc, apt) ; 
          EndPaint (hwnd, &ps) ;
          return 0 ;


2 commentaires

Cela ne semble certainement pas avoir de sens. Le système génère un message wm_paint en réponse à une partie d'une fenêtre marquée comme invalide, comme lors de l'appelant invalidaterect . Appelant Invalidaterect immédiatement suivi de beginPaint est essentiellement un non-op.


Merci à tous pour les réponses. Donc, il semble que l'auteur met en effet invalidaterect () dans le mauvais message. Il existe également trois messages WM_Mouse où la peinture se produit via GetDC () et je pense que c'est l'endroit où Invalidaterect () devrait être appelé.


3 Réponses :


3
votes

La seule chose que cela fait est forcer toute la fenêtre à être invalide et non seulement tout ce qui se passe soit invalide (par exemple, en raison d'une fenêtre superposée étant déplacée de la voie).

Je ne suis pas sûr que cela compte dans ce cas, mais c'est ce que l'appel accomplit.


0 commentaires


0
votes

La réponse est: Non, ce n'est pas une erreur faite par l'auteur. L'appel de la fonction Invalidateect () est dans le message droit et provoque de repeindre la zone du client entier dans tous les cas (comme je suppose, mais je n'étais pas sûr à 100%, c'est pourquoi j'ai demandé une aide). Si vous avez ce livre et que vous avez du mal à comprendre cet exemple, essayez de comprendre chaque ligne de code. Il m'a fallu une semaine pour comprendre pourquoi il y a un appel à Invalidaterect ().

Merci à tous pour vos réponses, je l'apprécie très bien!


0 commentaires