Accueil > Forum > > > > [C / Win32] Listbox en ownerdraw : Comment changer les couleurs (fond et texte) des items
[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
|
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
|
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
|
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
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|