J'ai régulièrement des soucis pour mettre à jour des zones de dessin complexes (par exemple, quand je trace un trait en biais, je souhaiterai rafraichir seulement la zone autour de ce trait, et pas le rectangle englobant, sinon, il y a du flickage).

Je croyais trouver ce qu'il me fallait dans la description de du message WM_PAINT. Les fonctions GetUpdateRect et GetUpdateRgn sont censées me forunir respectivement le rectangle englobant et la région de mise de mise à jour de la fenêtre. Or ces appels de fonctions me fournissent à chaque fois 0, soit la valeur ERROR "An error occurred".

Au début, je me disais que les deux éléments étaient nuls et qu'à chaque fois, c'était toute la fenêtre qui était mise à jour. Je trouvais cela bizarre, car le code pour un objet vide est NULLREGION "Region is empty". Or je viens de me rendre compte qu'il y a bel et bien une région de mise à jour. Il n'y a que la zone nécessaire qui est redessinée.

Le seul moyen que j'ai trouvé pour récupérer des informations relatives à ma zone de mise à jour, c'est de récupérer le Device Context associé à la fenêtre, et d'appeler la fonction membre CDC::GetBoundsRect. J'ai bien une région définie dans mon DC, c'est pas tout à fait anormal. Mais si j'essaye de modifier cette region, via OffsetClipRgn, je n'ai aucune erreur, mais il n'y a aucun effet, c'est toujours la même zone qui est redessinée.


Ça fait plusieurs fois que je me penche sur le sujet, et là, je fais plus que tourner en rond.

Comment je fais pour manipuler la région de mise à jour de ma fenêtre ???