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 :

Faire disparaitre un TrackPopupMenu


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 37
    Par défaut Faire disparaitre un TrackPopupMenu
    Bien le bonjour a tous,

    j'affiche une icone dans la TrayBar et lors d'un clic droit, j'affiche un PopupMenu avec la fonction TrackPopupMenu(..). J'utilise le code de la faq en modifiant la fonction OnTrayNotify. (lien vers la FAQ)

    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
     
    afx_msg LRESULT CCamSetupDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam)
    {
        if ((UINT)wParam != 1)
            return 0 ;
        POINT pt;
     
         CMenu myMenu;
         int nCmd;
        switch (lParam)
        { 
        case WM_RBUTTONDOWN:
        case WM_CONTEXTMENU:
            GetCursorPos(&pt);
    	myMenu.CreatePopupMenu();
    	myMenu.InsertMenuA(0,MF_BYPOSITION|MF_STRING,1,_T("Exit"));
    	nCmd = myMenu.TrackPopupMenu(TPM_RETURNCMD|TPM_BOTTOMALIGN|TPM_LEFTBUTTON|TPM_RIGHTALIGN,
                pt.x, pt.y, this);
    	if (nCmd >0)
    	{
    		CString str;
    		myMenu.GetMenuStringA(nCmd, str, MF_BYCOMMAND);
    		if (str == _T("Exit"))
    		AfxGetMainWnd()->PostMessage(WM_SYSCOMMAND,SC_CLOSE,0);
    		}
    		break;
    	case WM_LBUTTONDOWN:
    	this->ShowWindow(SW_RESTORE);
    	break;
        } 
        return 0; 
    }
    Tout fonctionne bien, mais la ou je ne sais pas quoi faire, c'est que j'aimerais que le menu disparaisse si je clique a coté. Or, il reste toujours affiché tant que je ne fais pas un clic dessus.
    J'utilise Visual2008. merci de votre aide.

    [edit]Si je clique dans la barre des taches sur un autre programme déja ouvert, celui-ci se met a clignoter (a la maniaire d'msn) au lieu d'afficher la fenetre. je dois encore cliquer 2 fois dessus pour afficher la fenetre. le premier clic la réduit et le second la réaffiche. Si ca peut aider...

  2. #2
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 37
    Par défaut
    msdn est mon amie, dsl

    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
    48
    afx_msg LRESULT CCamSetupDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam)
    {
        if ((UINT)wParam != 1)
            return 0 ;
        POINT pt;
     
            CMenu myMenu;
    		int nCmd;
        switch (lParam)
        { 
        case WM_RBUTTONDOWN:
        case WM_CONTEXTMENU:
     
    //ici
    		SetForegroundWindow();
     
     
     
            GetCursorPos(&pt);
          //  myMenu.LoadMenuA(IDR_MENU1);
    		myMenu.CreatePopupMenu();
    		myMenu.InsertMenuA(0,MF_BYPOSITION|MF_STRING,1,_T("Exit"));
    		nCmd = myMenu.TrackPopupMenu(TPM_RETURNCMD|TPM_BOTTOMALIGN|TPM_LEFTBUTTON|TPM_RIGHTALIGN,
                pt.x, pt.y, this);
     
     
    //et la
    		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);
    		}
    		break;
    	case WM_LBUTTONDBLCLK:
    		this->ShowWindow(SW_RESTORE);
    		break;
    	/*case WM_DISPLAYCHANGE:
    		myMenu.*/
        } 
        return 0; 
    }

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

Discussions similaires

  1. faire disparaitre le curseur de saisie et ...
    Par lacsap49 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/01/2006, 14h45
  2. [Tkinter] faire disparaitre un label ou autre solution
    Par thierry_b dans le forum Tkinter
    Réponses: 3
    Dernier message: 06/01/2006, 17h22
  3. Faire disparaitre un bouton!
    Par manuaccess10 dans le forum IHM
    Réponses: 11
    Dernier message: 02/12/2005, 07h28
  4. faire disparaitre du texte par rapport à radio bouton
    Par allowen dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/10/2005, 14h20
  5. Réponses: 5
    Dernier message: 27/02/2004, 11h20

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