Je suis en train de créer le menu contextuel en utilisant la fonction TrackPopupMenu dans mon application, le code que j'utilise dans c'est comme ce qui suit:Problèmes avec l'utilisation TrackPopupMenu sur win7
CMenu menu;
if (menu.LoadMenu(IDR_MENU_TRAY))
{
CMenu* pSubMenu = menu.GetSubMenu(0);
if (pSubMenu != NULL)
{
pSubMenu->ModifyMenu(IDM_CLOSE,MF_BYCOMMAND,IDM_CLOSE ,g_cfg->GetLang(TEXT_MAIN_CLOSE,"Exit(&X)"));
pSubMenu->ModifyMenu(IDM_SHOW,MF_BYCOMMAND,IDM_SHOW ,g_cfg->GetLang(TEXT_MAIN_OPEN_SHUTTER,"Open(&O)"));
CPoint point;
GetCursorPos(&point);
SetForegroundWindow();
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, messageOnlyWnd);
}
}
Le code fonctionne parfaitement sur Windows XP, alors que sur Win7 et Vista, il ne le fait pas. Le problème sur win7 et Vista est qu'il faut un peu de temps pour afficher le menu, peut-être 1 min ou plus. Mais si j'éteins l'Aero sur win7 ou vista, ça fonctionne bien comme sur winXP, donc je suppose que quelque chose doit être en conflit avec Aero dans le code, mais je ne sais pas comment le réparer. Est-ce que quelqu'un peut m'aider avec ça? J'apprécierai beaucoup si quelqu'un m'aide.
Merci pour votre réponse. J'ai essayé comme vous l'avez suggéré, mais le problème est toujours là. Créer un projet vide avec juste le code du menu contextuel fonctionne correctement sur win7 avec Aero activé. Dans mon application, même afficher un menu lorsque le clic droit dans un contrôle CEdit prend beaucoup de temps pour le menu à afficher. Mais quand l'Aero est éteint, tout est OK. En plus, je n'ai pas utilisé d'autres libs ou de code à part la fonction TrackPopupMenu lors de la création d'un menu contextuel, donc je suis confus avec ça depuis pas mal de temps. Il me rend fou!! – AJAY
Il est difficile de diagnostiquer plus loin sans regarder le reste de votre code. Votre application effectue-t-elle un traitement en arrière-plan dans le thread principal? Cela pourrait ralentir l'interface graphique. – casablanca
Il effectue un traitement en arrière-plan, mais ce que je ne comprends pas, c'est qu'il fonctionne correctement sur WinXP et Win7 avec Aero désactivé, mais pas avec Win7 avec Aero lors de la création d'un menu contextuel. Donc je suppose qu'il peut y avoir quelque chose de conflictuel entre l'Aero dans Win7 et la fonction TrackPopupMenu. J'ai aussi mis quelques points d'arrêt dans mon code en utilisant VS2003, j'ai trouvé que les autres lignes marchaient sans heurt, sauf la ligne avec TrackPopupMenu, qui prend jusqu'à 1min pour finir! – AJAY