Bonjour,
désolé d'arriver vers vous avec comme premier poste une question, mais je suis sur un projet qui m'est important,
et je m'arrache les cheveux sur ce bout de code.
je cherche donc a creer un bouton qui reste enfoncé apres un clique dessus,
la simple ligne "BS_AUTOCHECKBOX | BS_PUSHLIKE" faisait l'affaire, seulement... je le veux bleu.
je suis arrive a ca:
(le bouton est defini suivant le parametre bs_ownerdraw et cette fonction appelée avec le message windows "WM_DRAWITEM"... )void Bouton(LPDRAWITEMSTRUCT lpds, LPCTSTR texte, COLORREF couleurtexte, COLORREF couleurfond)
{
SIZE dims;
char nom[50];
strcpy_s(nom, texte);
GetTextExtentPoint32(lpds->hDC, nom, strlen(nom), &dims);
SetTextColor(lpds->hDC, couleurtexte);
SetBkColor(lpds->hDC, couleurfond);
BOOL etat = lpds->itemState & ODS_SELECTED;
int largeur = lpds->rcItem.right - lpds->rcItem.left;
int hauteur = lpds->rcItem.bottom - lpds->rcItem.top;
ExtTextOut(lpds->hDC, (largeur - dims.cx) / 2 + etat, (hauteur - dims.cy) / 2 + etat, ETO_OPAQUE | ETO_CLIPPED, &lpds->rcItem, nom, strlen(nom), NULL);
DrawEdge(lpds->hDC, &lpds->rcItem, (etat ? EDGE_SUNKEN : EDGE_RAISED), BF_RECT);
return;
}
mais du coup, je ne vois pas comment faire pour que windows considere ce bouton comme une checkbox?
(
j'ai essayer de simplement creer une variable qui change de valeure entre 1 et 0 a la suite des cliques sur ce bouton et de le dessiner "enfoncé" et "relaché" suivant la valeure de cette variable.
du genre:
if 1 ---> drawedge (...... EDGE_SUNKEN)
if 0 ---> drawedge (...... EDGE_RAISED)
mais il semble y avoir un conflit quelque part: le premier clique n'est pas pris en compte et le bouton est redessiné des lors que la souris change de focus.
)
...... help.. please !
Partager