7

MFC で POPUP タイプのメニュー項目を削除する方法。RemoveMenu() は ID または位置を取ります。POPUP メニューの ID がないため、残されたオプションは位置を使用することです。

しかし、RemoveMenu() を呼び出す方法と場所がわかりません。

ファイル編集テスト
            Test_submenu_1
            Test_submenu_2
            Test_submenu_3 > submenu_3_item_1
            Test_submenu_4
            Test_submenu_5

Test_submenu_3 を削除したいですか? submenu_3_item_1 の位置「2」を渡して RemoveMenu() を呼び出すことができるように、Test の CMenu オブジェクトを見つける方法がわかりません。

これを行うための提案は大歓迎です。

ありがとう!

4

4 に答える 4

8

この関数はまさにそれを行うため、LoadMenu は使用できません。

ロードされたメニューを変更した後、ロードに使用されたメニュー オブジェクトが範囲外になると、そのメニューは強制終了されます。現在使用されているメニューを変更する必要があります。

メニューはメイン メニューのポップアップ部分で、2 番目の位置にあります。5 つの項目が含まれており、2 つ目は別のポップアップです。私の理解では、あなたはこのアイテムとこのアイテムのポップアップを削除したいと考えています。機能させるには、メイン ウィンドウに現在のメニューを要求する必要があります。

CMenu* pMenu = GetMenu(); // get the main menu
CMenu* pPopupMenu = pMenu->GetSubMenu(2);//(Test menu with item....)
pPopupMenu->RemoveMenu(2, MF_BYPOSITION);

もちろん、このコードはメイン フレームからのものです。他の場所で使用する場合は、メイン フレームへのポインターを使用してすべてにアクセスする必要があります。

于 2012-09-27T04:09:22.460 に答える
1

以下を試してください。最初に Test サブメニューを取得し (インデックス 2)、それを取得したら、その Test_submenu_3 サブメニューを位置 (これも 2) で削除するように指示します。

CMenu topMenu;
topMenu.LoadMenu(IDR_YOUR_MENU);
CMenu& testSubMenu = *topMenu.GetSubMenu(2);
testSubMenu.RemoveMenu(2,MF_BYPOSITION);
于 2012-09-26T14:13:03.757 に答える
0

「テスト」は、最上位メニューの (位置による) 3 番目のメニュー項目です。垂直ではなく水平にレンダリングされています。最上位メニューへのハンドルがあると仮定すると、「テスト」メニューを取得する場合と同じコードを使用して、サブ メニューを取得します。

于 2012-09-26T13:34:49.893 に答える