2012-09-26 16 views
7

W MFC sposób usuwania elementu menu typu POPUP. RemoveMenu() albo weź ID lub pozycję. Ponieważ nie ma identyfikatora dla menu POPUP, pozostała opcja to użycie pozycji.Usuwanie menu w MFC

Ale nie dostaję jak i gdzie mogę wywołać RemoveMenu().

 
File Edit Test 
      Test_submenu_1 
      Test_submenu_2 
      Test_submenu_3 > submenu_3_item_1 
      Test_submenu_4 
      Test_submenu_5 

Chcę usunąć Test_submenu_3? Nie otrzymuję sposobu znalezienia obiektu CMenu dla testu, aby móc wywołać funkcję RemoveMenu(), przekazując pozycję "2" dla podmenu_3_item_1.

Wszelkie sugestie dotyczące tego będą bardzo mile widziane.

Dzięki!

Odpowiedz

7

Nie można używać Load Menu, ponieważ ta funkcja właśnie to robi.

Po modyfikacji załadowanego menu zostaje zabite, gdy obiekt menu użyty do załadowania go wykracza poza zakres. Musisz zmodyfikować menu, które jest aktualnie używane.

Twoje menu to wyskakująca część menu głównego, druga pozycja. Zawiera 5 pozycji, a drugi to kolejne wyskakujące okienko. Według mojego zrozumienia, chcesz usunąć ten element i popup tego elementu. Aby pracować trzeba będzie poprosić okna głównego do bieżącego menu:

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

Oczywiście, ten kod jest od ramy głównej. Jeśli chcesz użyć go gdzie indziej, będziesz musiał uzyskać dostęp do wszystkich używając wskaźnika do głównej ramki.

0

"Test" jest trzecim elementem menu (według pozycji) w menu najwyższego poziomu. Po prostu renderowano go poziomo, a nie pionowo. Zakładając, że masz uchwyt do menu najwyższego poziomu, użyj tego samego kodu, którego użyjesz, aby uzyskać menu podrzędne, tak jak chciałbyś dostać menu "Test".

0

Spróbuj poniżej. Najpierw dostajesz podmenu Test (indeks 2), a kiedy już to powiesz, usuń jego podmenu Test_submenu_3 według pozycji (również 2).

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