0

アプリケーションで 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と競合しているに違いないと思いますが、それを修正する方法がわかりません。それを手伝ってくれる人はいますか?誰かが私を助けてくれれば、とても感謝しています。

4

1 に答える 1

0

このコードに問題はありません。私はTrackPopupMenuVistaで問題なく使用しました。問題の原因は他の場所にある可能性があります。の呼び出しを削除してみてくださいSetForegroundWindow。それでも問題が解決しない場合は、ポップアップメニューコードだけで空のプロジェクトを作成してみてください。

于 2010-07-18T06:44:01.343 に答える