Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2461 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Visual C++] Changer la couleur du texte d'un bouton ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Visual C++] Changer la couleur du texte d'un bouton ?

n°311632
_john_doe_
Posté le 17-02-2003 à 22:28:35  profilanswer
 

Malgré des recherches sur ce forum et sur Google (ah, et aussi dans mon bouquin de merde (Le Tout En Poche / Visual C++ 6.0)dans lequel y'a rien d'intéressant), j'ai pas trouvé de méthode simple pour changer la couleur du texte d'un bête bouton.
 
C'est faisable quand même, non ?  
Bon, bah merci d'avance :)

mood
Publicité
Posté le 17-02-2003 à 22:28:35  profilanswer
 

n°311706
gatorette
Posté le 18-02-2003 à 01:24:34  profilanswer
 

Il faut intercepter le message WM_CTLCOLORBTN dans ta fenêtre parente. Et je pense que juste faire un SetTextColor sur le DC qui t'ai donné doit suffire :
 

Code :
  1. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  2. {
  3. ...
  4. switch( message )
  5. {
  6. ...
  7. case WM_CTLCOLOR:
  8. {
  9. ::SetTextColor( reinterpret_cast<HDC>(wParam), RGB(0x99,0xCC,0xFF) );
  10. break;
  11. }
  12. ...
  13. }
  14. ...
  15. }


 
Si tu veux dessiner toi même ton contrôle, il te faut soit utiliser des contrôles "owner-drawn" et répondre au message WM_DRAWITEM, soit utiliser des contrôles "custom-drawn" et répondre à la notification NM_CUSTOMDRAW.


Message édité par gatorette le 18-02-2003 à 01:25:26

---------------
each day I don't die is cheating
n°311891
_john_doe_
Posté le 18-02-2003 à 11:53:32  profilanswer
 

Merci beaucoup :)
 
Par contre est-ce que ça vient de moi ou est-ce que c'est vraiment mal foutu ? Je veux dire, ça fait beaucoup de code juste pour changer la couleur du texte...
Enfin bon, y'a sûrement quelque chose qui m'échappe  :sleep:

n°311909
gatorette
Posté le 18-02-2003 à 12:15:55  profilanswer
 

C'est pas très bien foutu, mais c'est assez logique également.
 
En effet, il y a deux solutions : soit le parent envoie la commande au bouton "ChangeTextColor" (ou définit un style quelconque à la création du bouton), soit le bouton demande au parent s'il a des changements à apporter à  la façon dont il doit se dessiner.
 
La première solution à l'avantage de la simplicité. Dans le parent, tu fais juste un appel à une fonction une fois pour toute et quand tu veux changer, tu rappelles la fonction. Par contre, elle impose d'utiliser un grand nombre de messages (voir la longue liste des messages pour une ListView par exemple) et implique une programmation particulière du contrôle. De plus, tu es obligé d'envoyer le message à tous tes boutons.
 
La deuxième solution impose évidemment une gestion plus lourde, mais permet un fonctionnement très souple. En effet, en gérant le message WM_CTLCOLORBTN sans se préoccuper de qui l'envoie, on peut changer l'apparence de tous les boutons en une seule fois. De même, ce message est envoyé quand le bouton doit se redessiner (je pense), et l'on modifie directement le DC qu'utilise le bouton pour se dessiner (je suppose), cette méthode est donc un peu plus efficiente.  
 
Il me semble donc que pour une action finalement assez rare, c'est une assez bonne méthode.


---------------
each day I don't die is cheating
n°311958
_john_doe_
Posté le 18-02-2003 à 13:18:21  profilanswer
 

gatorette a écrit :

C'est pas très bien foutu, mais c'est assez logique également.
 
En effet, il y a deux solutions : soit le parent envoie la commande au bouton "ChangeTextColor" (ou définit un style quelconque à la création du bouton), soit le bouton demande au parent s'il a des changements à apporter à  la façon dont il doit se dessiner.
 
La première solution à l'avantage de la simplicité. Dans le parent, tu fais juste un appel à une fonction une fois pour toute et quand tu veux changer, tu rappelles la fonction. Par contre, elle impose d'utiliser un grand nombre de messages (voir la longue liste des messages pour une ListView par exemple) et implique une programmation particulière du contrôle. De plus, tu es obligé d'envoyer le message à tous tes boutons.
 
La deuxième solution impose évidemment une gestion plus lourde, mais permet un fonctionnement très souple. En effet, en gérant le message WM_CTLCOLORBTN sans se préoccuper de qui l'envoie, on peut changer l'apparence de tous les boutons en une seule fois. De même, ce message est envoyé quand le bouton doit se redessiner (je pense), et l'on modifie directement le DC qu'utilise le bouton pour se dessiner (je suppose), cette méthode est donc un peu plus efficiente.  
 
Il me semble donc que pour une action finalement assez rare, c'est une assez bonne méthode.


 
Merci beaucoup pour ces explications (et pour le lien qui va m'être très utile je pense) :)
 
Juste une dernière petite question : Tu as appris le C++ comment ? Je demande ça parce que t'as l'air assez calé(e). Là je commence tout juste à m'y mettre, et pour tout dire j'ai un peu de mal ( :o ).
 
Merci encore   :hello:

n°312017
gatorette
Posté le 18-02-2003 à 14:42:51  profilanswer
 

_John_Doe_ a écrit :

Tu as appris le C++ comment ?


J'ai eu quelques cours C/C++ vraiment pas très avancés mais j'ai surtout appris par moi même. J'ai la chance de bosser dans une boîte où ils me laissent du temps pour apprendre (et répondre aux messages sur les forums !).
 

_John_Doe_ a écrit :

Je demande ça parce que t'as l'air assez calé(e).


Merci pour la remarque, mais sur le C/C++, je ne suis certainement pas le plus calé du forum ! C'est vrai par contre que mon boulot m'amène à pas mal bosser la prog. Windows et donc je m'y connais un peu là dedans.


---------------
each day I don't die is cheating

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Visual C++] Changer la couleur du texte d'un bouton ?

 

Sujets relatifs
[FLASH]Traitement de texte...[MySQL] Changer le mot de passe de MySQL ?
[VB] Editeur de texte, ajouté des élements dans un menuj'aime po AppWizard et ClassWizard de VIsual C++
[Visual Studio C++] recherche code pour la comparaison de 2 imagesSimuler un clic sur un bouton en javascript
[vb] Taille max d un champ texteComment créer une zone de texte dynamiquement?
[HTML] Comment créer un bouton Précédent ?faire chnager de couleur un cellule au passage de la souris via css
Plus de sujets relatifs à : [Visual C++] Changer la couleur du texte d'un bouton ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR