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

Windows Discussion :

Affichage d'éléments d'un menu contextuel


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Points : 12
    Points
    12
    Par défaut Affichage d'éléments d'un menu contextuel
    Bonjour a tous,

    voilà mon problème : j'affiche un menu contextuel lors d'un clic droit sur une liste quelconque. Ce composant graphique hérite d'une classe mère.

    Dans la classe fille je construis le menu contextuel avec un item qui s'affiche correctement. A là construction du menu contextuel, j'appelle une méthode de la classe mère qui ajoute un item au menu. Seulement cet item ne s'affiche pas

    voici le code de la création du menu contextuel dans la classe fille :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    int TrackListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    	if (ItlObCheckListCtrl::OnCreate(lpCreateStruct) == -1)
    		return -1;
    
    	SetContextMenu(IDR_OBLISTCTRL);
    	ItlObListCtrl::SetRandomFlag(true);
    	return 0;
    }
    
    void TrackListCtrl::OnContextMenu(CWnd* pWnd, CPoint point) 
    {
    	CMenu menu;
    	if (menu.LoadMenu(IDR_OBLISTCTRL))
    	{
    		CMenu* pPopup = menu.GetSubMenu(0);
    		ASSERT(pPopup != NULL);
    		//pPopup->EnableMenuItem(IDM_RANDOM_VALUE,MF_ENABLED);
    		pPopup->EnableMenuItem(IDM_APPLY_TO_SEL,MF_GRAYED);
    		pPopup->EnableMenuItem(ID_RANDOMIZE_ALL,MF_ENABLED);
    		pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x, point.y,pWnd);
    		
    	}
    }
    et celui de l'ajout de l'item dans la classe mère

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    void ItlObListCtrl::SetRandomFlag(bool isRandom)
    { 
    	//m_bRandomizeFlag = isRandom;
    	EnableRandomizeAllItems(isRandom);
    }
    
    void ItlObListCtrl::EnableRandomizeAllItems(bool bEnable)
    {
    	TRACE("Enable RANDOMIZE");
    	if (bEnable) {
    		// add command to context menu
    		CMenu* pMenu = GetContextMenu();
    		if (!pMenu) {
    			// create it
    			m_pMenu = new CMenu();
    			m_pMenu->CreateMenu();
    			CMenu popup;
    			popup.CreatePopupMenu();
    			m_pMenu->AppendMenu(MF_POPUP, (UINT)popup.Detach());
    			pMenu = GetContextMenu();
    		}
    		else {
    			pMenu->AppendMenu(MF_SEPARATOR);
    		}
    		CString sMenu;
    		sMenu.Format(sRandomizeAllMenuString, "");
    		pMenu->AppendMenu(MF_STRING | MF_ENABLED, ID_RANDOMIZE_ALL, sMenu);
    
    	}
    }
    Voilà, j'ai essayé de faire d'après pas mal d'exemple mais là je bloque vraiment.

    Merci.

    Jean

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Points : 12
    Points
    12
    Par défaut ...
    en fait je me suis aperçu que je faisais mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    menu.LoadMenu(IDR_OBLISTCTRL)
    après la modification dynamique dudit menu, et qu'il semblait donc logique qu'il me charge ke menu tel que défini dans le fichier de def.

    Du coup j'ai changé le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CMenu menu;
    menu.LoadMenu(IDR_OBLISTCTRL);
    pour un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CMenu* menu = GetContextMenu();
    mais quand j'essaye de recuperer le sous menu, l'ASSERT qui suit pète et la suite me renvoit une erreur (l'appli se termine)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CMenu* pPopup = menu->GetSubMenu(0);
    		ASSERT(pPopup != NULL);
    		pPopup->EnableMenuItem(IDM_APPLY_TO_SEL,MF_GRAYED);
    Si qqn a une idée, je lui en serai vraiment reconnaissant.

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/03/2012, 17h15
  2. Réponses: 2
    Dernier message: 28/11/2011, 22h33
  3. Interdire l'affichage du menu contextuel par défaut
    Par beegees dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 11/07/2009, 16h44
  4. Réponses: 4
    Dernier message: 25/01/2008, 12h00
  5. [JAVASCRIPT][MENU CONTEXTUEL] affichage
    Par mathieugamin dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/11/2006, 21h46

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