Changé la couleur d'un bouton

Résolu
KsmoinO Messages postés 26 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 23 avril 2007 - 18 avril 2007 à 14:12
KsmoinO Messages postés 26 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 23 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

    LPDRAWITEMSTRUCT pdis;
    HDC hDC;
   
    bool is_pushed, is_focused , is_checkeded;
   
    UINT uState;
    LONG res=0;
   
    pData = (PlanningCtrl *)GetWindowLong(hWnd,GWL_USERDATA);
   
    // 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 :/

auriez vous une idée qui pourrai m'aider ?

8 réponses

SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
18 avril 2007 à 17:44
Bizarre chez moi ca marche tres bien. va jeter un coup d oeuil sur une de mes sources > http://www.cppfrance.com/codes/CUSTOMISATION-CONTROLES-AUTOMATIQUE-OU-APPLICATION-THEME-PERSO-WIN_39508.aspx

Je ne croit pas que la version du site gere les pushlikes mais les check et radio fonctionnent
3
KsmoinO Messages postés 26 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 23 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
3
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
18 avril 2007 à 17:16
Pour avoir l'etat d'un bouttonbool bChecked (SendMessage(lpdis->hwndItem, BM_GETCHECK, 0, 0) BST_CHECKED);

Mais en ownerdraw je crois que le style BS_PUSHLIKE est a gerer toi meme.

d'apres la msdn ODS_SELECTED : The menu item's status is selected.
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
18 avril 2007 à 17:22
Je voulais dire ODS_CHECKED The menu item is to be checked. This bit is used only in a menu.
Je crois pas que ce soit ca qui t'interesse.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KsmoinO Messages postés 26 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 23 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
0
KsmoinO Messages postés 26 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 23 avril 2007
18 avril 2007 à 17:26
En fait je veux faire un check box en ownerdraw commen pourrais je faire
0
KsmoinO Messages postés 26 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 23 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
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Derniè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".
0