2012-09-26 17 views
7

In MFC come rimuovere una voce di menu di tipo POPUP. RemoveMenu() prende ID o posizione. Dal momento che non esiste un ID per il menu POPUP, l'opzione a sinistra è usando la posizione.Rimozione del menu in MFC

Ma non sto ottenendo come e dove posso chiamare RemoveMenu().

 
File Edit Test 
      Test_submenu_1 
      Test_submenu_2 
      Test_submenu_3 > submenu_3_item_1 
      Test_submenu_4 
      Test_submenu_5 

Voglio rimuovere Test_submenu_3? Non capisco come trovare oggetto CMenu per Test in modo da poter chiamare RemoveMenu() passando la posizione "2" per submenu_3_item_1.

Qualsiasi suggerimento per fare questo sarà molto apprezzato.

Grazie!

risposta

7

Non è possibile utilizzare LoadMenu, poiché questa funzione fa proprio questo.

Dopo aver modificato il menu caricato, viene ucciso quando l'oggetto del menu utilizzato per caricarlo non rientra nell'ambito. Devi modificare il menu che è attualmente utilizzato.

Il menu è una parte popup del menu principale, la seconda in posizione. Contiene 5 articoli e il secondo è un altro popup. Per quanto ho capito, si desidera rimuovere questo elemento e il popup di questo elemento. Per farlo funzionare dovrete chiedere finestra principale del menu attuale:

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

Naturalmente, questo codice è dal telaio principale. Se si desidera utilizzarlo altrove, è necessario accedere a tutti utilizzando il puntatore al frame principale.

0

'Test' è la terza voce di menu (per posizione) nel menu di livello superiore. È stato appena reso in orizzontale piuttosto che in verticale. Supponendo che tu abbia un handle per il menu di primo livello usa lo stesso codice che useresti per ottenere i sottomenu come faresti per ottenere il menu 'Test'.

0

Prova il seguente. Si ottiene prima il sottomenu Test (indice 2), poi una volta che si dice di rimuovere il sottomenu Test_submenu_3 dalla posizione (anche 2).

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