[MFC] Menu dynamique

Menu dynamique [MFC] - C++ - Programmation

Marsh Posté le 26-02-2006 à 14:08:04    

Bonjour,
Lorsqu'on créer un menu avec les MFC, il faut qu'il soit créé par avance dans les ressources mais moi je voudrais avoir un menu vide à la base et ajouter les items en fonction d'un traitement une fois le programme lancé. Peut-on faire ca?
 
Merci


Message édité par AsTro le 26-02-2006 à 14:08:22
Reply

Marsh Posté le 26-02-2006 à 14:08:04   

Reply

Marsh Posté le 26-02-2006 à 15:24:21    

http://c.developpez.com/faq/vc/?page=GesMenus
 
Faire bon usage de CMenu et de ses méthodes


Message édité par slash33 le 26-02-2006 à 19:54:51
Reply

Marsh Posté le 26-02-2006 à 19:22:53    

Merci

Reply

Marsh Posté le 28-02-2006 à 02:10:27    

Mainteant j'ai un autre souci. Comme mon menu est dynamique, je ne sais pas par avance les items qui vont y etre. Donc comment savoir lorsque l'utilisateur clic sur tel ou tel item du menu? Je ne peux pas faire de lien static du genre :


ON_COMMAND(IDM_ITEM_EXIT, OnExit)

Reply

Marsh Posté le 28-02-2006 à 08:41:20    

Je ne vois pas ce que ça change. Tu écris tous les gestionnaires de commandes possibles. Si le menu ne contient pas l'item de commande alors cette commande n'est pas accessible à l'utilisateur.
 
S'il s'agit d'items variables (par exemple une énumération d'objets de l'application créés dynamiquement par l'utilisateur), tu peux faire usage de ON_COMMAND_RANGE mais cela implique que tu définisses un nombre maximum d'objets adressables.
 
Néanmoins, il faut voir si l'emploi d'un menu dynamique se justifie ou si la désactivation d'un item prédéfini n'est pas plus appropriée.
 
Quel est ton usage du menu dynamique?

Reply

Marsh Posté le 28-02-2006 à 08:51:25    

Un article et des sources qui peuvent t'intéresser:
http://www.codeguru.com/Cpp/contro [...] .php/c3711

Reply

Marsh Posté le 28-02-2006 à 13:29:46    

Merci je vais regarder ça ;)

Reply

Marsh Posté le 17-05-2006 à 11:09:23    

Dis donc, es-tu parvenu a le faire marcher ce menu dynamique?
... parce que ca m'intéresse  :D

Reply

Marsh Posté le 18-05-2006 à 22:36:02    

Comme epliqué dans le 1er lien j'ai utiliser la méthode "append" de CMenu pour ajouter mes éléments.
Ensuite j'ai intercepté le message WM_COMMAND et j'ai traité les différents cas en fonction de wParam et lParam
 

Code :
  1. LRESULT CPowerManagementDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
  2. {
  3. if (message == WM_COMMAND)
  4. {
  5.  if (wParam == 0 && lParam == 0)
  6.  {
  7.   ...
  8.   return 0;
  9.  }
  10.  else if (wParam == 1 && lParam == 1)
  11.  {
  12.   ...
  13.   return 0;
  14.  }
  15.  ...
  16. }
  17. }


Message édité par AsTro le 18-05-2006 à 22:39:38
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed