2012-09-26 35 views
7

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

しかし、私はRemoveMenu()をどこでどこで呼び出すことができません。

 
File Edit Test 
      Test_submenu_1 
      Test_submenu_2 
      Test_submenu_3 > submenu_3_item_1 
      Test_submenu_4 
      Test_submenu_5 

私はTest_submenu_3を削除しますか?私は、サブメニュー_3_item_1の位置 "2"を渡すことによってRemoveMenu()を呼び出すことができるように、TestのCMenuオブジェクトを見つける方法を取得していません。

これをお勧めします。

ありがとうございます!

答えて

7

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

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

0

'テスト'は、トップレベルメニューの3番目のメニュー項目(位置別)です。それはちょうど垂直ではなく水平にレンダリングされています。トップレベルのメニューのハンドルを持っていると仮定すると、 'テスト'メニューを表示するのと同じように、サブメニューを表示するのに使うのと同じコードを使用します。

0

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

CMenu topMenu; 
topMenu.LoadMenu(IDR_YOUR_MENU); 
CMenu& testSubMenu = *topMenu.GetSubMenu(2); 
testSubMenu.RemoveMenu(2,MF_BYPOSITION); 
関連する問題