2012-09-26 12 views
7

In MFC, wie ein Menüelement POPUP Typ entfernt. RemoveMenu() entweder ID oder Position nehmen. Da für das POPUP-Menü keine ID vorhanden ist, wird die Option "Position" verwendet.Entfernen von Menü in MFC

Aber ich bekomme nicht, wie und wo ich RemoveMenu() aufrufen kann.

 
File Edit Test 
      Test_submenu_1 
      Test_submenu_2 
      Test_submenu_3 > submenu_3_item_1 
      Test_submenu_4 
      Test_submenu_5 

Ich möchte Test_submenu_3 entfernen? Ich bekomme nicht, wie finden CMenu Objekt für Test, so dass ich RemoveMenu() aufrufen kann, indem ich die Position "2" für submenu_3_item_1 übergebe.

Jeder Vorschlag dafür wird sehr geschätzt.

Danke!

Antwort

7

Sie können LoadMenu nicht verwenden, da diese Funktion genau das tut.

Nach dem Ändern des geladenen Menüs wird es gelöscht, wenn das zum Laden verwendete Menüobjekt den Gültigkeitsbereich verlässt. Sie müssen das Menü ändern, das derzeit verwendet wird.

Ihr Menü ist ein Popup-Teil des Hauptmenüs, an zweiter Stelle. Es enthält 5 Elemente und das zweite ist ein weiteres Popup. Zu meinem Verständnis möchten Sie diesen Artikel und das Popup dieses Artikels entfernen. , damit es funktioniert Sie Hauptfenster für das aktuelle Menü fragen haben:

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

Natürlich ist dieser Code aus dem Hauptrahmen ist. Wenn Sie es woanders verwenden möchten, müssen Sie auf alle mit dem Zeiger auf den Hauptrahmen zugreifen.

0

"Test" ist der dritte Menüpunkt (nach Position) im obersten Menü. Es wurde nur horizontal und nicht vertikal gerendert. Angenommen, Sie haben ein Handle für das Top-Level-Menü, verwenden Sie den gleichen Code, mit dem Sie die Untermenüs aufrufen, als würden Sie das "Test" -Menü aufrufen.

0

Versuchen Sie die folgenden. Sie erhalten zuerst das Test-Untermenü (Index 2), und wenn Sie das einmal haben, sagen Sie ihm, dass es das Untermenü Test_submenu_3 nach Position (auch 2) entfernen soll.

CMenu topMenu; 
topMenu.LoadMenu(IDR_YOUR_MENU); 
CMenu& testSubMenu = *topMenu.GetSubMenu(2); 
testSubMenu.RemoveMenu(2,MF_BYPOSITION);