KsmoinO
Messages postés26Date d'inscriptionlundi 4 avril 2005StatutMembreDernière intervention23 avril 2007
-
18 avril 2007 à 14:12
KsmoinO
Messages postés26Date d'inscriptionlundi 4 avril 2005StatutMembreDernière intervention23 avril 2007
-
23 avril 2007 à 09:54
Boujour,
je désire créer, un bouton avec les styles : BS_CHECKBOX et BS_PUSHLIKE et je désire qu'en fonction de l'état de se bouton il s'affiche de couleur différente.
si le bouton est créer de cette façon :
CreateWindowEx(0,"BUTTON",nom_boutton,
BS_CHECKBOX | BS_PUSHLIKE
| WS_CHILD | WS_VISIBLE,
x,y,
Width,Height,
hWnd,NULL,
NULL,NULL);
je n'arrive pas à modifier la couleur
et si il est créé de cette façon :
CreateWindowEx(0,"BUTTON",nom_boutton,
BS_OWNERDRAW
| WS_CHILD | WS_VISIBLE,
x,y,
Width,Height,
hWnd,NULL,
NULL,NULL);
avec dans le traitement du message WM_DRAWITEM
// On affecte à pdis le contenu de lParam
pdis = (LPDRAWITEMSTRUCT) lParam;
// Vérifie si le bouton est appuyé
is_pushed = pdis->itemState & ODS_SELECTED;
// et s'il détient le focus
is_focused = pdis->itemState & ODS_FOCUS;
// et son état
is_checkeded = pdis->itemState & ODS_CHECKED; //reste tout le temps à faux
//Définir la couleur du texte:
SetTextColor(pdis->hDC, RGB(0,0,0));
//Définir la couleur du fond:
SetBkColor(pdis->hDC, RGB(0,255,0));
ExtTextOut(pdis->hDC,0,0,ETO_CLIPPED|ETO_OPAQUE,&(pdis->rcItem),"toto",4,NULL);
// Dessin du bouton
DrawEdge(pdis->hDC,&(pdis->rcItem),(is_pushed'EDGE_SUNKEN:EDGE_RAISED),BF_RECT);
return TRUE;
je n'arrive pas à modifier l'état du bouton mais je peux choisir la couleur :/
KsmoinO
Messages postés26Date d'inscriptionlundi 4 avril 2005StatutMembreDernière intervention23 avril 2007 23 avril 2007 à 09:54
j'avais donc plus de 50 boutons à customiser j'ai donc fais un peu comme ta source changeant la procédure de traitement du bouton et en rajoutant des varriables, ça marche plutôt bien merci de ton aide
KsmoinO
Messages postés26Date d'inscriptionlundi 4 avril 2005StatutMembreDernière intervention23 avril 2007 18 avril 2007 à 17:24
si je fais :
SendMessage(lpdis->hwndItem, BM_GETCHECK, 0, 0)
il merenvoit BST_UNCHECKED
bon jusque là rien d'anormal, mais si ensuite je fais
SendMessage(lpdis->hwndItem, BM_SETCHECK,BST_CHECKED, 0)
suivit de :
SendMessage(lpdis->hwndItem, BM_GETCHECK, 0, 0)
il me renvoit encore BST_UNCHECKED
Comment contourner ce problème avec un ownerdrawn
KsmoinO
Messages postés26Date d'inscriptionlundi 4 avril 2005StatutMembreDernière intervention23 avril 2007 19 avril 2007 à 08:43
bon j'ai un peu parcourru ta source pour voir comment tu faisais
toi tu utilise une classe perso pour gérer les actions sur les boutons n'est il pas possible d'utiliser les standards ?
merci en tout cas de ton aide je crois qu'au pire je m'en sortirai comme tu as fait
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 19 avril 2007 à 17:18
Oui, oui pas besoin de classes (surtout si tu n'as qu'un seul boutton customisé) et le sous classement du boutton est obligatoire uniquement si tu veut le faire reagir au passage de la souris (sans clic) sinon tu peut tout gerer via la "MainProc".