在win7上使用TrackPopupMenu的问题

时间:2010-07-18 06:23:10

标签: winapi mfc contextmenu aero

我正在尝试使用我的应用程序中的TrackPopupMenu函数创建上下文菜单,我在其中使用的代码如下所示:

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); 
            }
        }

代码在WinXP上运行完美,而在win7和vista上却没有。 win7和vista的问题是弹出菜单需要相当长的时间,可能是1分钟或更长时间。但是如果我在win7或vista上关闭Aero,它就像在winXP上一样运行顺畅,所以我想在代码中必须与Aero发生冲突,但我不知道如何修复它。有人可以帮我吗?如果有人帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:0)

我认为这段代码没有任何问题。我在Vista上使用TrackPopupMenu没有任何问题。问题的根源可能在于其他地方。尝试删除对SetForegroundWindow的通话。如果这不起作用,请尝试仅使用弹出菜单代码创建一个空项目。