Comportement étrange de la couleur d'arrière-plan du contrôle d'édition lors de l'utilisation de contrôles communs WinXp

StackOverflow https://stackoverflow.com/questions/1621077

Question

J'ai un problème étrange (enfin, au moins, je le trouve étrange =)). J'écris ma propre bibliothèque d'interface graphique, qui est un wrapper autour de Windows API (et oui, je connais WTL et les frameworks tels que MFC =)). Au stade actuel, j’ai incorporé les contrôles communs de cette manière: par exemple, la classe Edit consiste en une fenêtre simple et une fenêtre d’édition standard au-dessus de celle-ci (MainWindow - > GhostWindow - > EditBox). Voici comment je peux par exemple changer la couleur de fond d'une édition dans une classe d'édition elle-même:

myedit->SetBkColor ( RGB ( 0, 0, 0 ) );

Et cela a bien fonctionné, jusqu’à ce que j’appelle InitCommonControlsEx et que je joigne un fichier manifeste à mon programme. Cela fait, mes modifications deviennent capables de changer de couleur uniquement lorsqu'elles sont activées. Pour être honnête, je ne me suis pas fait une idée détaillée de la raison pour laquelle je me comporte de la sorte et de ce que je fais mal, alors j'apprécierai toute aide.

Merci, n ° 535.

Était-ce utile?

La solution 2

Eh bien, tout est beaucoup plus facile que je le pensais. J'étais trop inattentif = (quand on n'utilise pas de style, on peut utiliser :: SetBkColor (...) pour changer la couleur d'arrière-plan et renvoyer un pinceau de WM_CTLCOLOR * pour changer une couleur de bordure. Les choses deviennent différentes après l'activation du style. Now :: SetBkColor (...) correspond à la couleur focus et le retour du pinceau change de couleur d'arrière-plan. Honte à moi = (

Autres conseils

  1. Lorsque vous joignez le manifeste de version 6, l'appel à InitcommonControlsEx devient inutile.

  2. Quoi qu'il en soit. Avec les contrôles communs de la version 6 chargés, la thématisation XP est utilisée même pour les contrôles Windows standard. Les couleurs d'arrière-plan des contrôles sont peintes avec la couleur xp-theme. Les messages WM_CTLCOLOR * sont donc moins utilisés.

  3. Vous substituez actuellement le refroidissement de divers éléments de contrôle à l'aide des messages WM_CTLCOLOR *?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top