Changer la couleur d'un label (static text control) avec Visual C++

Changer la couleur d'un label (static text control) avec Visual C++ - C++ - Programmation

Marsh Posté le 02-12-2003 à 15:19:45    

Je travaille avec Visual C++ sous Win98.
 
J'ai créé une fenêtre de dialogue avec des composants dessus : des edit, des static text (labels) et des boutons. :)
 
Objectif:
Je souhaite modifier au moins la couleur des labels (police et taille de la police aussi si possible).
 
Ma recherche sur la MSDN a donné ceci :
 
"This control displays a static text. The text may use a predefined style. This is done by putting the name of the style in the form {\style} at the start of the string, where style is one of the keys in the TextStyle Table. A base text style can be assigned to the control by supplying {&style} at the very beginning of a the text string. This style is used whenever no other style is defined by the string." :cry:
 
Je ne vois pas du tout où il faut écrire {\style} et comment faire pour modifier la police, sa taille, la couleur (où écrire les champs). Dans la fenêtre Propriété -> Caption ? :??:
 
En fait j'ai besoin d'un exemple concret :)
 
Merci pour vos réponses. :hello:
 
Kason
 

Reply

Marsh Posté le 02-12-2003 à 15:19:45   

Reply

Marsh Posté le 02-12-2003 à 15:49:18    

TN062: Message Reflection for Windows Controls ds l'aide de visual..
A toi la joie de la réflexion de messages!! ;)
 
Désolé je détaille pas plus c un trop gros chantier et ça fait un moment que je l'ai fait..


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 02-12-2003 à 16:21:36    

Petite précision : je ne travaille pas avec les MFC...
 
Je voudrais éviter de passer par les messages windows. Il doit bien avoir un moyen de paramétrer la police, la couleur, la taille ? On ne va tout de même pas utiliser le marteau-piqueur pour écraser une mouche ?
 
Kason

Reply

Marsh Posté le 02-12-2003 à 16:23:58    

Ben.. J'avoue que je me suis "contenté" de ce moyen..


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 02-12-2003 à 17:34:31    

kason a écrit :

Petite précision : je ne travaille pas avec les MFC...
 
Je voudrais éviter de passer par les messages windows. Il doit bien avoir un moyen de paramétrer la police, la couleur, la taille ? On ne va tout de même pas utiliser le marteau-piqueur pour écraser une mouche ?
 
Kason


Tu programmes en win32 et tu veux eviter les messages ? ben bon courage.
Pour changer les couleurs de tes labels : regarde le message WM_CTLCOLORSTATIC et les fonctions SetBkColor et SetTextColor.
Pour modifier la police (style, couleur, taille, ...), je crée à la mano la police, et j'écris le tout dans un rectangle avec un ExtTextOut (y a peut etre plus simple !)

Reply

Marsh Posté le 02-12-2003 à 17:48:24    

WM_SETFONT.
Tu peux récupérer une font systeme avec GetStockObject

Reply

Marsh Posté le 03-12-2003 à 11:21:51    

C bien ce que je me disais.. Même sans MFC, pour éviter les messages.. ??


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 03-12-2003 à 11:45:07    

H4dd3R a écrit :

C bien ce que je me disais.. Même sans MFC, pour éviter les messages.. ??


La prog Win32 est principalement basée sur l'envoi et la réception de messages. Si tu ne fais pas de MFC, ça veut dire que tu fais du Win32. Donc n'espère pas couper à leur utilisation. Je vois pas ce qui te gène dans l'utilisation des messages

Reply

Marsh Posté le 03-12-2003 à 12:29:55    

Harkonnen a écrit :


La prog Win32 est principalement basée sur l'envoi et la réception de messages. Si tu ne fais pas de MFC, ça veut dire que tu fais du Win32. Donc n'espère pas couper à leur utilisation. Je vois pas ce qui te gène dans l'utilisation des messages


 
c'est chiant, nul et lourd ?  
 
#include <windowsx.h> pour de la grosse macro qui tache

Reply

Marsh Posté le 03-12-2003 à 12:59:46    

C'est puissant, orienté objet, générique ?

Reply

Marsh Posté le 03-12-2003 à 12:59:46   

Reply

Marsh Posté le 03-12-2003 à 13:30:43    

HelloWorld a écrit :

C'est puissant, orienté objet, générique ?


 
je dois etre du genre gros balot, je prefere faire list.addItem(toto) que SendMessage(list, LB_ADDITEM,(WPARAM)item) mais bon, la poesie ca se discute pas [:icon12]

Reply

Marsh Posté le 03-12-2003 à 14:13:36    

chrisbk a écrit :


 
je dois etre du genre gros balot, je prefere faire list.addItem(toto) que SendMessage(list, LB_ADDITEM,(WPARAM)item) mais bon, la poesie ca se discute pas [:icon12]


Bah c'est normal, on n'a jamais vu de poete utiliser les api système  :o  

Reply

Marsh Posté le 03-12-2003 à 14:36:13    

hellbilly a écrit :


Bah c'est normal, on n'a jamais vu de poete utiliser les api système  :o  


 
Et que fait tu de Pertinoic ? :heink:
 

Citation :

Oh Message,  
Simple et generique
Direct et Franc,
Traverse les ages,
Traverse l'espace,
Franchis les obstacles,
Et Change la couleur de mon putain de static text de mes couilles


 
(inachevé)
 

Reply

Marsh Posté le 03-12-2003 à 15:56:31    

Le style est intéressant mais les rimes sont vraiment pauvres  :na:

Reply

Marsh Posté le 03-12-2003 à 15:58:39    

hellbilly a écrit :

Le style est intéressant mais les rimes sont vraiment pauvres  :na:  


 
ben si personne n'en a entendu parler, c'est pas pour rien [:spamafote]
Il est un peu trop precurseur quoi

Reply

Marsh Posté le 03-12-2003 à 16:13:22    

c'est le probleme de tous ces artistes avant-gardistes, ce sont des incompris méconnus.

Reply

Marsh Posté le 03-12-2003 à 16:18:30    

Harkonnen a écrit :


La prog Win32 est principalement basée sur l'envoi et la réception de messages. Si tu ne fais pas de MFC, ça veut dire que tu fais du Win32. Donc n'espère pas couper à leur utilisation. Je vois pas ce qui te gène dans l'utilisation des messages


Tu prèches un convaincu pour ce qui est de la nécessité des messages pour de la prog windows..
Par contre c vrai que c moche, et pour ceux que la poésie des messages ne touche pas, ils peuvent y échapper avec .net.. ;)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 03-12-2003 à 16:52:10    

avec meme n'importe quoi d'un poil plus haut niveau que l'api w32...

Reply

Marsh Posté le 03-12-2003 à 17:03:40    

Pas avec les MFCs en tt cas: c plus haut, mais pas d'un poil entier!! ;)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 03-12-2003 à 17:07:05    

bah elles t'evitent deja pas mal de message quand meme :O  

Reply

Marsh Posté le 03-12-2003 à 17:48:49    

Pas mal.. Mais pas tous (notamment ceux qui intéressent kason).. ;)
Ce n'est donc pas un poil entier. ;)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 03-12-2003 à 17:50:41    

chaipas si c'est d'un poil entier ou pas, par contre toi les cheveux tu les coupes bien en 4 :O (ouais en fait ca rendrait mieux en allemand cette feinte, mais passons)

Reply

Marsh Posté le 03-12-2003 à 17:57:11    

Disons que je suis suffisamment dégouté des mfcs pour avoir une certaine rancune. ;)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 03-12-2003 à 17:59:48    

oué je te dirais que je suis pas enchanté non plus (et winform roxor, tout ca)

Reply

Marsh Posté le 04-12-2003 à 10:19:07    

Voilà une solution que j'ai testé et qui marche :)
 

Code :
  1. HDC hdcStatic;
  2. // Couleur de fond de la fenêtre (bleu pâle)
  3. HBRUSH hbrBackground = CreateSolidBrush(RGB(180, 213, 245));
  4. ...
  5. case WM_CTLCOLORDLG:
  6.     // Application de la couleur de fond de la fenêtre
  7.     return (LONG)hbrBackground;
  8. case WM_CTLCOLORSTATIC:
  9.     hdcStatic = (HDC)wParam;
  10.     // Couleur rouge   
  11.     SetTextColor( hdcStatic, RGB(255, 0, 0) );
  12.     SetBkMode( hdcStatic, TRANSPARENT );
  13.     return (LONG)hbrBackground;
  14. ...


 
Nota. Pour changer la couleur d'un seul composant ou d'utiliser plusieurs couleurs, il suffit d'utiliser GetDlgCtlrID
 
Non testé, mais devrait marcher  :D
 

Code :
  1. switch (GetDlgCtlrID(hWnd))
  2. {
  3. case IDC_Titi:
  4.    SetTextColor( hdcStatic, RGB(255, 0, 0) );
  5.    break;
  6. case IDC_Toto:
  7.    SetTextColor( hdcStatic, RGB(255, 255, 0) );
  8.    break;
  9. default:
  10.    SetTextColor( hdcStatic, RGB(0, 0, 0) );
  11. }


 
Sinon, dans ma recherche de solution, je ne comprends pas ce que fait la "TextStyle table" (cf. Text control de la MSDN) et comment l'utiliser dans le cas présent : {\style} ou {&style}  :sweat:  
 
Kason

Reply

Marsh Posté le 04-12-2003 à 10:28:15    

TextControl c une classe de .net.. Tu es sûr de tes filtres MSDN??


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 18-05-2005 à 14:59:32    

@kason
 
j'ai mis un moment avant de comprendre comment fonctionnait le code mais c'est bon ! (j'avais pas compris que l'on testai l'ID de l'item à dessiner :whistle:, jme voyai déjà en train de galérer pour le refiler en paramètre à la fonction)
 
Milles mercis, même pas eu besoin de poster :)


Message édité par jeoff le 18-05-2005 à 15:00:23
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed