begin process at 2012 05 30 20:00:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

[C / Win32] Listbox en ownerdraw : Comment changer les couleurs (fond et texte) des items


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[C / Win32] Listbox en ownerdraw : Comment changer les couleurs (fond et texte) des items

lundi 16 janvier 2006 à 01:05:41 | [C / Win32] Listbox en ownerdraw : Comment changer les couleurs (fond et texte) des items

Inekman

Bonsoir à tous, Je cherche déseprérément à changer les couleurs des items d'une listbox (blanc sur fond rouge par exemple). J'ai trouvé pêle-mêle des API à utiliser, à savoir WM_DRAWITEM voir WM_MEASUREITEM, des structures DRAWITEMSTRUCT et autres. Par contre je ne trouve pas d'exemples --> simples <-- qui m'expliquent clairement comment tout cela doit être imbriqué. Pour info complémentaire, je dirais que chaque item de la zone de liste peut avoir une valeur (passée par LB_SETITEMDATA) comprise entre 0 et 3 en sachant que 0 et 1 donne un fond rouge et 2 et 3 donne un fond noir. (histoire de cadrer la demande) Voilà, si vous savez des choses là-dessus, merci de bien vouloir m'aider. Inek.
lundi 16 janvier 2006 à 01:07:26 | Re : [C / Win32] Listbox en ownerdraw : Comment changer les couleurs (fond et texte) des items

Inekman

--> En parlant maladroitement d'API, je faisais en fait référence aux messages à traiter. Cependant l'essentiel est dit dans le post.
lundi 16 janvier 2006 à 16:36:47 | Re : [C / Win32] Listbox en ownerdraw : Comment changer les couleurs (fond et texte) des items

Arnotic

Administrateur CodeS-SourceS
Il sufftit d'aller dans la documentation de MSDN concernant ce control et tu as des exemples expliqués.
[ Lien ]

@+
Arnotic,
Admin CS,
[ Lien ]
MVP Visual C++
lundi 16 janvier 2006 à 17:00:32 | Re : [C / Win32] Listbox en ownerdraw : Comment changer les couleurs (fond et texte) des items

aardman

Membre Club
Réponse acceptée !
Salut,
Pour une listbox ownerdraw la valeur associée se passe lors du LB_INSERTSTRING.
WM_MEASUREITEM: Tu n'est pas obligé de traiter ce message, sauf si tu veux modifier la taille d'un item. Pour modifier la hauteur de tout les items tu peux toujours utiliser LB_SETITEMHEIGHT.

WM_DRAWITEM:
La structure DRAWITEMSTRUCT te donne tout ce dont tu as besoin, le dc le rectangle, le status, le focus..

Exemple:
J'ai defini une structure qui contient les infos de l'item (texte, couleur, brush).
Pour chaque item on alloue et on remplie une structure LBITEM.
On ajoute un item en passant un pointeur sur cette structure dans le LB_INSERTSTRING.
Lors du WM_DRAWITEM, on recupere ce pointeur dans le champ itemData de la structure DRAWITEMSTRUCT, et on dessine..

Structure:
typedef struct _LBITEM
{
   LPTSTR text;         // texte de l'item
   COLORREF textcolor;  // couleur du texte
   HBRUSH bgbrush;      // brush pour dessiner le fond de l'item
} LBITEM, *PLBITEM;


Traitement du WM_DRAWITEM:
LPDRAWITEMSTRUCT info = (LPDRAWITEMSTRUCT) lParam;
PLBITEM item = (PLBITEM) info->itemData;

SetTextColor(info->hDC, item->textcolor);
SetBkMode(info->hDC, TRANSPARENT);
     
FillRect(info->hDC, &info->rcItem, item->bgbrush);
DrawText(info->hDC, item->text, -1, &info->rcItem, DT_SINGLELINE | DT_VCENTER | DT_CENTER);

Biensur ca reste tres basique, puisqu'on ne prend pas compte du focus et de la selection lors du dessin.





lundi 16 janvier 2006 à 17:54:45 | Re : [C / Win32] Listbox en ownerdraw : Comment changer les couleurs (fond et texte) des items

Inekman

Merci beaucoup aardman, j'ai réussi à me baser sur ton code pour récupérer le contenu des items de la zone de liste. Pour mon projet, j'ai une liste chaînée de structures qui contiennent le texte à afficher, donc j'ai réutilisé ça. Maintenant, le texte s'affiche complètement à gauche de la liste et la 1ère lettre de chaque ligne est légèrement rognée. J'ai le texte, c'est déjà une bonne chose, je dois maintenant essayé de colorier le fond des items :)
lundi 16 janvier 2006 à 18:11:19 | Re : [C / Win32] Listbox en ownerdraw : Comment changer les couleurs (fond et texte) des items

aardman

Membre Club
Réponse acceptée !
Salut,
Ben pour colorier le fond c'est le FillRect() qui fait ca.
Si tu dessines du texte par dessus faut penser a faire le SetBkMode(info->hDC, TRANSPARENT);
Et pour l'emplacement du texte, il faut regarder dans msdn tout les flags dispo pour le dernier param de DrawText(), dans l'exemple j'ai mis DT_VCENTER | DT_CENTER donc le texte devrait s'afficher en plein milieux du rectangle de l'item.



lundi 16 janvier 2006 à 18:23:29 | Re : [C / Win32] Listbox en ownerdraw : Comment changer les couleurs (fond et texte) des items

Inekman

Réponse acceptée !
Oui oui je me suis renseigné dans le SDK. Pour mon projet, je les ai donc mis en DT_LEFT, sauf qu'ils sont beaucoup trop à gauche en fait. En mode normal, y'a comme une marge de 1 ou 2 pixel entre le bord et le caractère alors qu'en ownerdraw le texte est complètement collé contre le bord. J'ai testé un truc avant de poster ce message et j'ai trouvé comment faire : RECT rcTxt; rcTxt = info->rcItem; rcTxt.left += 3; FillRect(info->hDC, &info->rcItem, fond); DrawText(info->hDC, ligne, -1, &rcTxt, DT_SINGLELINE | DT_LEFT | DT_VCENTER); Et voilà, ça marche. Donc pour finir, un ENORME MERCI pour aardman car j'en ai bouffé des sites à propos de l'ownerdraw et voilà seulement que je comprend ! Tous mes meilleurs voeux pour 2006 aardman.


Cette discussion est classée dans : changer, listbox, fond, couleurs, items


Répondre à ce message

Sujets en rapport avec ce message

Changement de toutes les couleurs dans une appli en MFC [ par obby ] Salut,  Je voudrai changer toutes les couleurs dans mon application. J'ai déjà réussi à changer la couleur de fond d'une boite de dialogue mais j'aim ListBox couleurs [ par juki_webmaster ] Bonjour, Aprés avoir fait pas mal de recherche sur cppfrance et sur google avec les termes dont j'ai put soutirer: listbox/couleur , j'ai rien put tr Changer couleur par un clique [Win32 sans MFC] [ par jojomillenium ] Bonjour, j'aimerai pouvoir changer la couleur de fond d'un static, ou meme d'un element picture (mon but et juste d avoir un carré rempli d'une couleu fond en c++ [ par galou63 ] bonjour,voilà je sais comment changer la couleur du texte dans un programme en c++ mais jaimerais savoir maintenant comment changer le fond!!si quelqu Changer la couleur du fond d'un édit [ par ndubien ] Bonjour, Je cherche à savoir comment faire pour modifier la couleur du fond d'un edit dont je connait le HWND. Merci d'avance pour vos réponses Changer la couleur des caractères et du fond d'écran sur Dev-C++ [ par fauve ] Salut à tous Je voudrais savoir si sur Dev-C++, il existe une fonction pour faire changer la couleur des caractères et/ou du fond d'écran ? Ca fait u fond d'écran [ par ndubien ] Bonjour,Comment faire pour changer le fond d'écran de l'ordinateur en C API Win32?Je connaît déjà un moyen (que je n'ai pas sous la main pour le momen Changer le fond d'écran [ par MorbhAck ] Bonsoir a tous !J'ai un 'tit problème.Je sais changer le fond d'écran en ecrivant dans la BDRmais j'ai remarqué que lorsque le fichier a un paramêtreA Changer la couleur de fond de son app [ par jb212121 ] BonjourVoila mon souciJe creer une mon app en appelantDialogBox(hInstance, MAKEINTRESOURCE(IDD_APP), NULL, AppDlgProc);Mais je trouve pas le moyen de Listbox : Probleme de suppresion de selection [ par camel ] j'ai un bouton ds mon app qui doit supprimer les items selectionnés par l'utilisateur. La listbox est bien en selection multiple et mon code est le su


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,092 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales