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 :

Problème ID de menu


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 37
    Par défaut Problème ID de menu
    Bonjour,

    j'ai créé une icone dans la TrayBar et elle affiche un popupMenu lorsque je fais un clic droit. j'ai une fonction "OnTrayNotify(WPARAM wParam, LPARAM lParam)" qui me permet de gérer l'affichage avec la fonction "TrackPopupMenu" et de récupérer l'item du menu sur lequel j'ai cliqué.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    afx_msg LRESULT CCamSetupDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam)
    {
        if ((UINT)wParam != 1)
            return 0 ;
     
    	POINT pt;
        CMenu myMenu,*tmpMenu;
    	int nCmd;
     
        switch (lParam)
        { 
        case WM_RBUTTONDOWN:
        case WM_CONTEXTMENU:
    		SetForegroundWindow();
            GetCursorPos(&pt);
    		myMenu.CreatePopupMenu();
     
    		myMenu.AppendMenu(MF_STRING|MF_POPUP,(UINT)this->m_FrameFormatMenu->m_Menu.GetSafeHmenu(),_T("Frame Format"));
    		myMenu.AppendMenu(MF_STRING|MF_POPUP,(UINT)m_FrameRateMenu->m_Menu.GetSafeHmenu(),_T("Frame Rate"));
    		myMenu.AppendMenu(MF_STRING|MF_POPUP,(UINT)this->m_FrameExposureMenu->m_Menu.GetSafeHmenu(),_T("Exposure Time"));
    myMenu.AppendMenu(MF_STRING,200,_T("Restore"));
    		myMenu.AppendMenu(MF_STRING,201,_T("Exit"));*/
    		nCmd = myMenu.TrackPopupMenu(TPM_RETURNCMD|TPM_BOTTOMALIGN|TPM_LEFTBUTTON|TPM_RIGHTALIGN,
                pt.x, pt.y, this);
    		PostMessage(WM_NULL, 0, 0);
    		if (nCmd >0)
    		{
    			CString str;
    			myMenu.GetMenuStringA(nCmd, str, MF_BYCOMMAND);
    			if (str == _T("Exit"))
    				AfxGetMainWnd()->PostMessage(WM_SYSCOMMAND,SC_CLOSE,0);
    			else if (str == _T("Restore"))
    				this->ShowWindow(SW_RESTORE);
    			else
    			{
    				//mes fonctions
    			}
    		}
    		myMenu.Detach();
    		break;
    	case WM_LBUTTONDBLCLK:
    		this->ShowWindow(SW_RESTORE);
    		break;
        } 
        return 0; 
    }

    les Menus "Frame Format" et "Frame Rate" sont créés dynamiquement au lancement du programme et peuvent etre modifiés par l'utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		m_FrameFormatMenu->m_Menu.CreatePopupMenu();
    		m_FrameFormatMenu->m_Menu.InsertMenuA(0, MF_BYPOSITION | MF_SEPARATOR, FRAME_FORMAT + m_FrameFormatMenu->m_NbItem++);
    		m_FrameFormatMenu->m_Menu.InsertMenu(1, MF_BYPOSITION | MF_STRING, FRAME_FORMAT + m_FrameFormatMenu->m_NbItem++, _T("1280 x 1024"));
    		m_FrameFormatMenu->m_Menu.InsertMenu(2, MF_BYPOSITION | MF_STRING, FRAME_FORMAT + m_FrameFormatMenu->m_NbItem++, _T("528 x 528"));
    l'affichage se passe bien lorsque je fais un clic droit. Par contre, lorsque je lis la value de "nCmd" dans le OnTrayNotify, j'ai des valeurs identiques pour les 2 menus, comme par exemple :
    nCmd = 106 lorsque je clique sur le 2ème élément de "FRAME RATE" et la fonction "GetMenuStringA" me retourne le 4ème élément de "FRAME FORMAT".

    si quelqu'un a une idée...

  2. #2
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 37
    Par défaut
    Bon, je vais certainement aller me pendre. j'avais changé la partie attribution des ID pour m'assurer que le nCmd soit bien different pour chaque éléments, mais cette définition se trouve dans un fichier qui n'est recompilé que lors d'un "rebuild all"
    Du coup, j'ai passé ma journée a chercher une erreur que j'ai corrigé a 9h du matin.
    Bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP-JS] Problème avec un menu déroulant
    Par grumly22 dans le forum Langage
    Réponses: 3
    Dernier message: 09/05/2006, 11h07
  2. problème avec un menu généré par MySQL
    Par GhostDady dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 30/03/2006, 10h45
  3. Problème avec un menu, sans utilisé de frame
    Par cyraile dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 19/01/2006, 17h57
  4. nombreux problèmes sur mon menu de gauche
    Par pp51 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/12/2005, 21h00
  5. ContextMenu de l'explorer: Problème de sous menu
    Par Ingham dans le forum Composants VCL
    Réponses: 8
    Dernier message: 26/02/2004, 08h06

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