timy94
Messages postés50Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention 7 janvier 2009
-
28 févr. 2006 à 09:05
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
28 févr. 2006 à 09:34
Bonjour.
J'utilise WM_DRAWITEM pour redessiner mes boutons (boutons créer par CreateWindow(....).
Premier problème : Quand je fais marcher mon programme en mode debug avec points d'arret dans WM_DRAWITEM: Cela fonctinne comme prévu. quand je clic sur le bouton 1 celui-ci devient rouge et quand je clic sur le bouton2 le bouton1 change de couleur et le bouton2 deviens rouge et ainsi de suite.
Mais quand je fait dérouler mon programme en mode normal le premier clic n'est pas detecté et le programme se déroule de façon bizzare. Il ne répond pas à la logique attendue. C'est comme-ci WM_DRAWITEM n'etait pas envoyé au premier clic!
Deuxième problème: Pourquoi LDRAWITEMSTRUCT lpdis ne fonctionne que quand WM_CTLCOLORDLG: est placé avant WM_DRAWITEM: ,( LDRAWITEMSTRUCT) lpdis n'est pas envoyé!
Troisième problème: Peut-on récuperer ,( LDRAWITEMSTRUCT)lpdis sans passer par case WM_DRAWITEM: par un SendMessage par exemple et comment faire. J'ai écris SendMessage(MyBouton,WM_DRAWITEM,NULL,( LDRAWITEMSTRUCT) lpdis); Le compile plante sur le quatrième parametre.
Ci-joint mon code.
Voila, j'avance quand même un peut plus tous les jour, merci d'avance.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 28 févr. 2006 à 09:34
C'est normal que les boutons ne se redessinent pas tout seuls.
Dès que tu cliques sur un bouton, tu dois invalider tous les boutons.
Tu ajoutes ca à la fin de WM_COMMAND:
InvalidateRect(hBouton1, 0, 1);
InvalidateRect(hBouton2, 0, 1);
InvalidateRect(hQuitter, 0, 1);