Проблемы с использованием TrackPopupMenu на win7 - PullRequest
0 голосов
/ 18 июля 2010

Я пытаюсь создать контекстное меню, используя функцию 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 минута или больше.Но если я выключаю Aero на win7 или vista, он работает ровно, как на winXP, так что я думаю, что-то должно конфликтовать с Aero в коде, но я просто не знаю, как это исправить.Кто-нибудь может мне помочь с этим?Я буду очень признателен, если кто-нибудь поможет мне.

1 Ответ

0 голосов
/ 18 июля 2010

Я не вижу ничего плохого в этом коде.Я использовал TrackPopupMenu на Vista без проблем.Источник проблемы может быть в другом месте.Попробуйте убрать звонок на SetForegroundWindow.Если это не сработает, попробуйте создать пустой проект только с помощью кода всплывающего меню.

...