Tutorial d'initiation A la programmation avec l'API Windows
Tutorial d'initiation a la programmation Windows avec Microsoft Visual C++
Chapitre 3Les fenêtres15. Fond personnalisé
Cours théorique :
Jusqu'à présent, nous avions laissé Windows effacer le fond. L'effacement de la zone client avant le redessinement n'est pas nécessaire, la méthode la plus simple et la plus rapide est de redessiner par dessus l'ancienne zone. Toutefois, si l'on veut redessiner une partie de la zone client seulement ou si le nouveau dessin ne couvre pas toute la zone (du texte avec fond transparent par exemple) il est nécessaire d'effacer d'abord.
Pour cela, il faut utiliser le message WM_ERASEBKGND. Lorsque ce message est envoyé, un 'handle' sur le contexte d'affichage à effacer est passé en paramètre. Il faut impérativement utiliser le 'handle' passé en paramètre pour effectuer toutes les opérations de dessin. L'application dispose de plusieurs solutions pour effacer la zone client. Elle peut effectuer des tâches complexes, afficher des images, puis un texte... Si les images ne couvrent pas toutes la zone, il faut effacer les parties qui resteront visibles. Pour cela, on peut utiliser la fonction FillRect(). Cette fonction ne prend pas en paramètre une couleur mais un HBRUSH. On peut créer des 'brushes' à partir d'images bitmap avec CreatePatternBrush() ou encore à partir d'une couleur unie avec CreateSolidBrush(). Si l'application désire simplement modifier la couleur de fond de sa zone client, elle n'est pas obligée de traiter le message WM_ERASEBKGND. Elle peut simplement utiliser CreateSolidBrush() et passer le résultat au membre hbrBackground de la structure WNDCLASSEX lors de la création de la classe de la fenêtre. De cette manière la fonction DefWindowProc() écrasera le fond elle même avec la couleur demandée.
|