SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013
-
27 août 2006 à 18:03
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013
-
29 août 2006 à 06:51
Bonjour, la je bloque sur un truc tout bete mais je voit pas du tout mon erreur. Je crée un dialogue tout bete avec 2 bouttons l'un avec le style BS_PUSHBUTTON et l'autre BS_DEFPUSHBUTTON donc normallement les deux devrait avoir BS_PUSHBUTTON.
je recupere le style avec LONG Styles = GetWindowLong(hwnd, GWL_STYLE);
Et jamais le test
if (Styles & BS_PUSHBUTTON) {
ne se valide.
J'ai meme testé
Styles = Styles | BS_PUSHBUTTON;
bool a = Styles & BS_PUSHBUTTON;
et a est toujours a false !
racpp
Messages postés1910Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201415 27 août 2006 à 20:42
Je pense que Spy++ le fait aussi par déduction. Car, apparemment, il
n'y a pas d'autre moyen. Voici un petit exemple pour reconnaitre le
style BS_PUSHBUTTON:
LONG Styles = GetWindowLong(hwnd, GWL_STYLE);
if(!(Styles & 0x0000000F)) -> alors le style est BS_PUSHBUTTON.
racpp
Messages postés1910Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201415 29 août 2006 à 05:57
Salut,
C'est tout à fait normal.
BS_DEFPUSHBUTTON = 0x00000001 BS_AUTORADIOBUTTON = 0x00000009
Donc 0x00000001 & 0x00000009 = 0x00000001
Les 4 bits de poids faible du style représentent le type de bouton. Il ne sont donc pas combinables. Ce n'est pas correct d'avoir ces deux styles en même temps pour un bouton. Pour reconnaitre le type de bouton il suffit donc de lire la valeur représentée pas ces 4 bits de poids faible:
LONG Styles = GetWindowLong(hwnd, GWL_STYLE);
LONG TypeBouton = Styles & BS_TYPEMASK ;
switch (TypeBouton)
{
case 0:
MessageBox(0,"BS_PUSHBUTTON","Type",0);
break;
case 1:
MessageBox(0,"BS_DEFPUSHBUTTON","Type",0);
break;
case 2:
MessageBox(0,"BS_CHECKBOX","Type",0);
break;
case 3:
MessageBox(0,"BS_AUTOCHECKBOX","Type",0);
break;
case 4:
MessageBox(0,"BS_RADIOBUTTON","Type",0);
break;
case 5:
MessageBox(0,"BS_3STATE","Type",0);
break;
case 6:
MessageBox(0,"BS_AUTO3STATE","Type",0);
break;
case 7:
MessageBox(0,"BS_GROUPBOX","Type",0);
break;
case 8:
MessageBox(0,"BS_USERBUTTON","Type",0);
break;
case 9:
MessageBox(0,"BS_AUTORADIOBUTTON","Type",0);
break;
case 10:
MessageBox(0,"BS_PUSHBOX","Type",0);
break;
case 11:
MessageBox(0,"BS_OWNERDRAW","Type",0);
break;
}
//.....
Ce petit exemple récupère le style du bouton et affiche son type dans un MessageBox.
BS_TYPEMASK n'est pas un style applicable à un bouton. C'est un masque permettant de retrouver le type de bouton. Il vaut 0x0000000F.
nightlord666
Messages postés746Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention23 mai 200710 27 août 2006 à 18:15
Tu est sur que le hwnd est un handle sur le bon controle (le bouton avec BS_PUSHBUTTON) ?
<hr size="2" width="100%" />Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
Vous n’avez pas trouvé la réponse que vous recherchez ?
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 27 août 2006 à 19:14
Et du coup ya un moyen de savoir si le style BS_PUSHBUTTON est dans un style de boutton ou pas ?.
En fait dans un checkbox il n'y est pas mais il y est dans un boutton tout simple. Je peux faire par elimination (si il n'a pas le style BS_CHECBOX) mais je suis toujours intrigué j'utlise un clone de spy++ et lui arrive a faire la difference.
racpp
Messages postés1910Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201415 27 août 2006 à 19:46
Selon MSDN, le style BS_PUSHBUTTON permet à la procédure de la fenêtre contenant le bouton de recevoir le message WM_COMMAND quand ce bouton est actionné. Ce style ne sert qu'à la lisibilité du code car de toute façon, tous les boutons envoient ce message à la fenêtre mère. Puisque la valeur de ce style est 0, on ne peut donc ni le récupérer, ni le supprimer, ni l'ajouter.
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 27 août 2006 à 20:06
Ben en fait je "customise" des dialogs et selon le controle (radio/boutton/groupbox) je ne redessine pas la meme chose. Je vais bosser par deduction avec des elseifs en commancant par le bas et si il n'a aucun des styles speciaux je ferait un boutton banal.
Mais je ne voit pas comment spy++ arrive a voir les controles qui l'ont ou pas.