Probleme avec les checks des menu.

SergentP Messages postés 20 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 25 juillet 2010 - 25 juin 2009 à 18:13
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 - 1 juil. 2009 à 01:57
Salut,
J'ai un item dans un menu qui est CHECKED d'origine, ensuite j'ai le code suivant :

-----
        case ID_B_AFFICHER_SOCK:
            GetMenuItemInfo( hMenu, ID_B_AFFICHER_SOCK, 0, &MenuInfo );
            switch ( MenuInfo.fState )
            {
            case MF_CHECKED:
                CheckMenuItem( hMenu, ID_B_AFFICHER_SOCK, MF_UNCHECKED );
                ShowWindow( NBSock, SW_HIDE );
                break;

            case MF_UNCHECKED:
                CheckMenuItem( hMenu, ID_B_AFFICHER_SOCK, MF_CHECKED );
                ShowWindow( NBSock, SW_SHOW );
                break;
            }
            break;
-----
Or, quand je clique sur cet item il reste en position CHECKED, je ne comprend pas pourquoi.
Merci d'avance .

7 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
26 juin 2009 à 06:26
Salut,
tu ne peux pas faire de switch sur fState car ce membre peut contenir plusieurs valeurs a la fois (chaque valeur représente un bit précis de la variable). il faut donc tester séparement les valeurs qui t'interessent:
if(MenuInfo.fState & MFS_CHECKED) { ... }
else if(MenuInfo.fState & MFS_UNCHECKED) { ... }
0
SergentP Messages postés 20 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 25 juillet 2010
26 juin 2009 à 08:39
J'ai fait comme tu dit (j'avais déjà essayé) : le menu se décoche mais ne se coche plus :

---
        case ID_B_AFFICHER_SOCK:
            GetMenuItemInfo( hMenu, ID_B_AFFICHER_SOCK, 0, &MenuInfo );
            if( MenuInfo.fState = MF_CHECKED )
            {
                CheckMenuItem( hMenu, ID_B_AFFICHER_SOCK, MF_UNCHECKED );
                ShowWindow( NBSock, SW_HIDE );
            }
            if( MenuInfo.fState = MF_UNCHECKED )
            {
                CheckMenuItem( hMenu, ID_B_AFFICHER_SOCK, MF_CHECKED );
                ShowWindow( NBSock, SW_SHOW );
            }
            break;
---

C'est bisare.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
26 juin 2009 à 09:06
c'est pas du tout ce que j'ai dis :)
0
SergentP Messages postés 20 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 25 juillet 2010
26 juin 2009 à 09:45
 ?
Je dois paraitre lourd mais les valeurs sont testés séparément, tu veux parlé de l'opérateur & ? Si c'est ça, ça ne marche pas non plus :/
0

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

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
27 juin 2009 à 09:29
Salut,
je parlais effectivement du &, si ça ne fonctionne toujours pas, peut-etre que tu n'as pas correctement initialisé la structure MenuInfo avant d'appeler GetMenuItemInfo() ?
0
SergentP Messages postés 20 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 25 juillet 2010
30 juin 2009 à 19:05
---------
MENUITEMINFO MenuInfo;

GetMenuItemInfo( hMenu, ID_B_AFFICHER_SOCK, 0, &MenuInfo );

if ( MenuInfo.fState = MFS_CHECKED )
...
---------
Rien de plus sur la structure. Le plus bizarre dans tout ça c'est que j'utilise cette structure plus haut dans mon code(différemment) et ça marche.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
1 juil. 2009 à 01:57
Salut,
il faut initialiser certains membres de la structure avant d'appeler GetMenuItemInfo.
et tu as toujours pas corrigé le =.
0
Rejoignez-nous