IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Ajouter dynamiquement un Item à un menu


Sujet :

MFC

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut Ajouter dynamiquement un Item à un menu
    Bonsoir,

    J'ai une appli en Dialog avec un menu,

    et j'aimerai rajouter dynamiquement des items

    à mon menu,

    comment dois je m'y prendre ?

    merci

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    CMenu::AppendMenu
    BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );

    BOOL AppendMenu( UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp );
    peut faire l'affaire apres recuperation du pointeur sur le menu (cf ton autre post).


  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    Merci bien Farscape !

    You're my god !!!

    par contre pour que le clic dessus lance une fonction,
    c'est vers ou que je dois le preciser ?

    [edit]

    tiens, c'est bizard ca (pourne pas changer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CMenu *pMenu = GetMenu(), *pContMenu = pMenu->GetSubMenu(0);
     
    // MENU
    pMenu->ModifyMenu(0, MF_BYPOSITION, 0, _T("MenuXYZ"));
     
    // Contenu du Menu
    pContMenu->ModifyMenu(0, MF_BYPOSITION, 0, _T("champ 1"));
    pContMenu->ModifyMenu(1, MF_BYPOSITION, 0, _T("champ 2"));
    Ce code fonctionne bien, je change bien l'affichage de mon menu,
    par contre je pensais que cela rajouterai un sous menu à mon premier champ et il n'en ai rien !! il le rajoute en dessous de champ 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pContMenu->AppendMenu(MF_STRING, NULL, "test alpha");
    pourquoi ?

    alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pMenu->AppendMenu(MF_STRING, NULL, "test alpha");
    rajoute bien un menu à coté de MenuXYZ

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    AppendMenu ça rajoute a la fin (comme son nom l'indique) .
    dans le cas d'un sous menu derriere la derniere item.
    si le pointeur est le menu racine en dernier sur la racine...
    si tu veux inserer a un emplacement spécifique il faudra utiliser :
    CMenu::InsertMenuItem
    BOOL InsertMenuItem(
    UINT uItem,
    LPMENUITEMINFO lpMenuItemInfo,
    BOOL fByPos = FALSE
    );
    ou pour un menu:
    CMenu::InsertMenu
    BOOL InsertMenu(
    UINT nPosition,
    UINT nFlags,
    UINT_PTR nIDNewItem = 0,
    LPCTSTR lpszNewItem = NULL
    );
    BOOL InsertMenu(
    UINT nPosition,
    UINT nFlags,
    UINT_PTR nIDNewItem,
    const CBitmap* pBmp
    );
    pour la reponse à ces items il faut indiquer un identifiant de commande :
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pContMenu->AppendMenu(MF_STRING,ID_TESTALPHA, "test alpha");
    ou ID_TESTALPHA est la commande du menu :
    apres pour traiter des commandes de menus dynamiques:
    il suffira de définir une plage dynamique de commandes menu.
    exemple de réponse sur la mainframe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
       //{{AFX_MSG_MAP(CMainFrame)
          // NOTE - the ClassWizard will add and remove mapping macros here.
          //    DO NOT EDIT what you see in these blocks of generated code !
       ON_WM_CREATE()
       //}}AFX_MSG_MAP
       ON_COMMAND_RANGE(ID_CMDMENU1,ID_CMDMENU100,OnItemRange)
    END_MESSAGE_MAP()
     
    void CMainFrame::OnItemRange(UINT nID)
    {
       CString msg;
       msg.Format("CMainFrame::OnItemRange, nID = %d",nID);
     
       AfxMessageBox(msg);
    }
    la ligne ON_COMMAND_RANGE est a rajouter manuellement.
    ID_CMDMENU1 est un define
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #define ID_CMDMENU1                        32000
    #define ID_CMDMENU2                        32001
    //............
    #define ID_CMDMENU100                     32100
    les identifiants sont consecutifs et tu recois donc la notification dans une seule fonction.

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    lol, j'ai vraiment du mal avec les menus !!

    j'ai ce menu :

    [Menu]
    -Items1
    -Items2
    -Items3

    je voudrais dynamiquement rajouter a item1 un sous menu

    [Menu]
    -Items1
    ->SSItem1
    ->SSItem2
    ->SSItem3
    -Items2
    -Items3


    j'ai beau tenter, pas moyen


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	CMenu *pMenu = GetMenu(), *pContMenu = pMenu->GetSubMenu(0);
    	MENUITEMINFO mii;
     
    	mii.cbSize = sizeof(MENUITEMINFO);
    	mii.fMask = MIIM_TYPE;
    	mii.fType = MFT_STRING;
    	mii.dwTypeData = (LPTSTR)"SSItems1";
     
    	pContMenu->InsertMenuItem(1, &mii, true);
    quoi que je modifie, mon sous items 1 se met dans le menu principal en fonction de sa position : dans mon ex, ca donne

    [Menu]
    -Items1
    -SSItem1
    -Items2
    -Items3

    jme bat !

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    je comprend vraiment pas !

    si manuellement, je crée un menu tel que :

    [Menu]
    -Item1
    -SSitem1
    -Item2
    -Item3

    et que je met ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pMenu->GetSubMenu(0)->GetSubMenu(0)->InsertMenuItem(1, &mii, true);
    j'obtiens bien :

    [Menu]
    -Item1
    -SSitem1
    -SSitem2
    -Item2
    -Item3

    par contre, si je ne crée pas à l'origine ce sous items, et que j'ai

    [Menu]
    -Item1
    -Item2
    -Item3

    le code precedent plante, logique
    par contre si je veux rajouter un sous menu avant, ca plante aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pMenu->GetSubMenu(0)->GetSubMenu(0)->AppendMenu(MF_STRING, NULL, "test alpha");
    et ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pMenu->GetSubMenu(0)->AppendMenu(MF_STRING, NULL, "test alpha");
    donne :
    [Menu]
    -Item1
    -Item2
    -Item3
    -test alpha

    please help !

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    tans pis, je jettes l'éponge....

    merci encore pour le reste

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    c'est mal ! ,
    il faut reprendre calmement ,je n'ai pas eu trop le temps de regarder .

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    Slt Farscape,

    lol

    bah, finalement, j'ai opté pour un Sous menu pré-concu avec un item :

    [Menu]
    - Langue
    -Défaut


    et la je rempli a partir du pointeur de Defaut

    c'est ok

Discussions similaires

  1. Ajouter dynamiquement des item au menu
    Par Ryu2000 dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 16/05/2012, 16h24
  2. [SWT Eclipse 3.5] List et ajout dynamique d'item
    Par wwave dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 03/05/2010, 14h37
  3. ajout dynamique d'item dans menu
    Par med_ellouze dans le forum VB.NET
    Réponses: 2
    Dernier message: 23/01/2008, 10h45
  4. ajouter dynamiquement des items dans un popup menu
    Par Malone dans le forum Composants VCL
    Réponses: 7
    Dernier message: 23/08/2005, 16h08
  5. Réponses: 2
    Dernier message: 09/05/2003, 17h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo