Bonjour,
je voudrais remplacer par une image (enfin exactement 1 image pour chaque état) la case à cocher d'une checkbox. Je n'ai pas trouvé comment faire : est-ce que quelqu'un l'a déjà fait et pourrait me dire comment procéder ?
Merci d'avance.![]()
Bonjour,
je voudrais remplacer par une image (enfin exactement 1 image pour chaque état) la case à cocher d'une checkbox. Je n'ai pas trouvé comment faire : est-ce que quelqu'un l'a déjà fait et pourrait me dire comment procéder ?
Merci d'avance.![]()
salut,
pas de solution toute faite, il faut customiser le controle en rédefinissant la fonction "Paint" ... c'est à dire, redessiner le controle toi meme, comme tu l'entends ...
pour ça, il y a le style BS_OWNERDRAW et la méthode CButton::OnDrawItem()
mais il faudra aussi gérer le dessin du texte ... pas simple si tu débutes en MFC. (regarde auprès de la fonction DrawText() )
regarde sur le net, il y a pleins de ressources sur le sujet, notamment ici : http://www.codeproject.com/KB/button...draw%20buttons
tu devrais surement y trouver ton bonheur ...
@+
Le truc c'est que j'aimerai toujours pouvoir utiliser la fonction GetCheck().
Si je suis obligé de repartir d'un CButton basique et de refaire ce mécanisme je trouverai ça passablement moisi ...
mais une CheckBox est un CButton ... c'est juste la façon de dessiner qui change. de meme pour un Radio button et un GroupBox
la méthode GetCheck() et SetCheck() est dispo.
l'état du bouton (donc coché ou pas) est fourni en paramètre à OnDrawItem() dans la structure DRAWITEMSTRUCT
@+
J'ai donc surchargé un CButton et redéfinit la fonction DrawItem() afin de personnaliser mon affichage.
Seul soucis si je crée mon bouton avec l'option BS_CHECKBOX, tout marche très bien avec un affichage classique (que je ne souhaite pas garder au final). Mais si je rajoute l'option BS_OWNERDRAW, alors la fonction SetCheck() ne fonctionne plus ... c'est tout simplement incompréhensible.
En affichage classique :
En affichage OWNERDRAW :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 GetCheck(); -> 0 SetCheck(1); GetCheck(); -> 1
Pour résumer en OWNERDRAW, bien que l'affichage se fasse comme je le souhaite, l'état ne change pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 GetCheck(); -> 0 SetCheck(1); GetCheck(); -> 0
Moi pas comprendre![]()
après tests et recherches il s'avère que c'est faux : il faut les surcharger pour que ça marche et ajouter un attribut à la checkbox perso pour retenir son état.la méthode GetCheck() et SetCheck() est dispo
En clair il faut tout se refaire puis ça fonctionne![]()
Partager