MFC : cocher un truc dans menu

cs_Buzu Messages postés 68 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 14 septembre 2007 - 17 janv. 2005 à 10:41
Khoral Messages postés 11 Date d'inscription vendredi 19 septembre 2003 Statut Membre Dernière intervention 2 mai 2007 - 7 juin 2005 à 09:23
Salut je voudrai savoir comment on fait pr q qd on clique sur Affichage" par exemple, si on sélectionne ce kon veu afficher, il y ai une coche qui se mette devant pour dire q c validé.
Exemple : Affichage - Barre d'état .
Merci a ceux ki répondront

12 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
17 janv. 2005 à 11:46
Dans le classwizzard, lorsque tu veux associer une commande à un item de menu, tu sélectionne la classe cible, l'id de menu et ON_COMMAND. Dans la fonction générée, tu fait l'éxcution de la commande (et tu sauvegarde dans une variable l'état dans lequel tu es) Pour cocher ou désactiver cette commande, il suffit de faire la même chose mais cette fois il faut choisir ON_UPDATE_COMMAND_UI. Dans la fonction générée tu as un pointeur passé en paramètre avec lequel tu peux appeler les fonction SetCheck et Enable.
0
Khoral Messages postés 11 Date d'inscription vendredi 19 septembre 2003 Statut Membre Dernière intervention 2 mai 2007
19 avril 2005 à 16:22
Salut

J'ai exactement le même problème que Buzu, à savoir que j'aimerais mettre une coche à côté de l'item menu sélectionné.

J'ai essayé avec le SetCheck et le Enable, mais aucun des deux ne
fonctionne (j'ai aussi essayé le SetText pour vérifier, il ne
fonctionne pas non plus).



Voici mon code :



void CTestinterfaceApp::OnUpdateAffichageKp(CCmdUI* pCmdUI)

{

pCmdUI->SetCheck(1) ;

}



Pour arriver là, je suis passer par le ClassWizard, AddFunction sur le ON_UPDATE_COMMAND_UI puis EditCode.



Je bloque depuis un moment dessus :/ alors si quelqu'un se sent une âme de sauveur, qu'il ne se gène pas :)



Autre précision : le
ON_COMMAND n'est pas encore fait, je ne sais pas si c'est important
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
19 avril 2005 à 17:46
Rajoute le ON_COMMAND c'est peut-être la cause (quand il n'y a pas de gestion de la commande le framework MFC désactive entièrement la commande de menu et du coup n'appelle peut-être pas OnUpdate).
0
Khoral Messages postés 11 Date d'inscription vendredi 19 septembre 2003 Statut Membre Dernière intervention 2 mai 2007
20 avril 2005 à 09:12
Merci pour ta réponse.



J'ai essayé de remplir le ON_COMMAND, ça ne marche toujours pas (le ON_COMMAND fonctionne bien, mais toujours pas le SetCheck).



Une autre petite précision, peut-être utile : j'ai remarqué qu'on
pouvait choisir la classe dans laquelle mettre les ON_COMMAND et
ON_UPDATE, je les ai mis dans la classe se terminant par Dlg, est-ce
juste ? Si je les mets dans la classe se terminant par App, il me sort
quelques erreurs (sur GetDlgItem et UpdateData).
0

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

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
20 avril 2005 à 09:51
Le OnUpdate ne fonctionne pas avec les Dialogs car cela est géré par la classe CFrameWnd et ses descendant or CDialog dérive directement de CWnd donc la gestion des menus dans un dialog n'est pas la même. Et avec les MFCs je ne sais plus comment il faut faire (peut-etre faire un GetMenu et cocher directement l'item)
0
Khoral Messages postés 11 Date d'inscription vendredi 19 septembre 2003 Statut Membre Dernière intervention 2 mai 2007
20 avril 2005 à 10:07
Merci pour ta réponse.



http://c.developpez.com/faq/vc/?page=CDialog#CDialogOnUpdateCommandUI



J'ai trouvé ça, je teste de suite.
0
Khoral Messages postés 11 Date d'inscription vendredi 19 septembre 2003 Statut Membre Dernière intervention 2 mai 2007
20 avril 2005 à 10:26
Je me réponds à moi-même ^^



Alors, la solution que je cite dans mon post précédent est *presque* la bonne. Je m'explique.



En suivant les conseils donnés sur le lien et sur MSDN, je peux utiliser le SetCheck, jusque là aucun problème.



Mais comment savoir si le menu est déjà coché ou pas ? De plus, pour
mon application, le menu déroulant donne 4 possibilités, toutes
exclusives l'une de l'autre (si on en choisit une, la précédente se
décoche).



Auriez-vous une idée pour régler ces 2 problèmes ?
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
20 avril 2005 à 11:34
GetMenuState de CMenu devrait te donner l'état de l'item. L'autre solution c'est de sauveagrder toi même dans une variable quel est le menu que tu as coché la dernière fois.
0
Khoral Messages postés 11 Date d'inscription vendredi 19 septembre 2003 Statut Membre Dernière intervention 2 mai 2007
20 avril 2005 à 16:07
Merci, tu es mon sauveur. Mon Jean-Paul 3 !



Je ne connaissais pas du tout CMenu, et en fouinant dans MSDN j'ai
trouvé CMenu::CheckMenuItem, le truc idéal pour ce que j'ai à faire.



Encore merci.
0
Khoral Messages postés 11 Date d'inscription vendredi 19 septembre 2003 Statut Membre Dernière intervention 2 mai 2007
21 avril 2005 à 09:40
Bon j'ai parlé trop vite (c'est tout moi ça ^^).



Pour info, j'ai finalement pris CMenu::CheckMenuRadioItem, qui permet
de regrouper plusieurs options menu pour qu'elles ne soient jamais
cochées en même temps.



Voici mon code :




CMenu affichage ;

affichage.LoadMenu(IDR_MENU1) ; // Marche jusque là
affichage.CheckMenuRadioItem(ID_AFFICHAGE_KP,ID_AFFICHAGE_PRESSIONS,ID_AFFICHAGE_KPCORDE,MF_BYCOMMAND);





Voici le menu, c'est le seul dans toute l'application :

http://www.image-dream.com/image.php?image=1114069034.menu.jpg



La ligne du CheckMenuRadioItem me renvoit 0, donc une erreur, et quand
j'essaye de l'intercepter avec GetLastError, il me dit Erreur
0:Opération réussie, donc ça ne m'avance pas beaucoup :/



Je précise que je suis avec Visual C++ 6, et que je n'ai donc pas le
même prototype pour cette fonction que celui décrit sur la MSDN
actuelle (je ne peux pas mettre un handler en premier paramètre, le
reste est inchangé).



La description du forum dit qu'il est réservé aux personnes au bord du suicide, je crois que j'en suis pas loin...
0
gabeuskadi Messages postés 4 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 2 juin 2005
6 juin 2005 à 18:06
Au lieu de :
CMenu affichage ;
affichage.LoadMenu(IDR_MENU1) ;
affichage.CheckMenuRadioItem(ID_AFFICHAGE_KP,ID_AFFICHAGE_PRESSIONS,ID_AFFICHAGE_KPCORDE,MF_BYCOMMAND);


tu mets :

CMenu* mmenu = GetMenu();
CMenu* submenu = mmenu->GetSubMenu(2); // ici 2 désigne le sous-menu concerné : à toi de mettre le bon paramètre
submenu->CheckMenuRadioItem(ID_VUE1, ID_VUE2,nID, MF_BYCOMMAND);

Je sais pas si ça va t'aider
Bon courage sinon
0
Khoral Messages postés 11 Date d'inscription vendredi 19 septembre 2003 Statut Membre Dernière intervention 2 mai 2007
7 juin 2005 à 09:23
En fait j'en suis arrivé à cette solution :)

Et effectivement c'est la bonne, elle fonctionne très bien.
0