Changé la couleur d'un bouton

[Résolu]
Signaler
Messages postés
26
Date d'inscription
lundi 4 avril 2005
Statut
Membre
Dernière intervention
23 avril 2007
-
Messages postés
26
Date d'inscription
lundi 4 avril 2005
Statut
Membre
Dernière intervention
23 avril 2007
-
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

Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

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
Messages postés
26
Date d'inscription
lundi 4 avril 2005
Statut
Membre
Dernière intervention
23 avril 2007

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
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

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.
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

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.
Messages postés
26
Date d'inscription
lundi 4 avril 2005
Statut
Membre
Dernière intervention
23 avril 2007

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
Messages postés
26
Date d'inscription
lundi 4 avril 2005
Statut
Membre
Dernière intervention
23 avril 2007

En fait je veux faire un check box en ownerdraw commen pourrais je faire
Messages postés
26
Date d'inscription
lundi 4 avril 2005
Statut
Membre
Dernière intervention
23 avril 2007

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
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

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".