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...