2012-09-26 13 views
7

En MFC, cómo eliminar un elemento de menú de tipo POPUP. RemoveMenu() toma ID o posición. Dado que no hay ID para el menú POPUP, la opción izquierda es usando posición.Eliminación de menú en MFC

Pero no entiendo cómo y dónde puedo llamar a RemoveMenu().

 
File Edit Test 
      Test_submenu_1 
      Test_submenu_2 
      Test_submenu_3 > submenu_3_item_1 
      Test_submenu_4 
      Test_submenu_5 

¿Quieres eliminar Test_submenu_3? No entiendo cómo encontrar el objeto CMenu para Prueba para poder llamar a RemoveMenu() pasando la posición "2" para submenu_3_item_1.

Cualquier sugerencia para hacer esto será muy apreciada.

Gracias!

Respuesta

7

No puede usar LoadMenu, ya que esta función hace precisamente eso.

Después de modificar el menú cargado, se cancela cuando el objeto del menú utilizado para cargarlo sale del ámbito. Tienes que modificar el menú que se usa actualmente.

Su menú es una parte emergente del menú principal, el segundo en su posición. Contiene 5 elementos y el segundo es otra ventana emergente. Que yo sepa, usted quiere eliminar este elemento y una ventana emergente de este artículo. para que funcione tendrá que pedir a la ventana principal del menú actual:

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

Por supuesto, este código es del bastidor principal. Si desea usarlo en otro lugar, tendrá que acceder a todos usando el puntero al marco principal.

0

'Prueba' es el tercer elemento del menú (por posición) en el menú del nivel superior. Simplemente se ha renderizado de forma horizontal en lugar de vertical. Asumiendo que maneja el menú de nivel superior, use el mismo código que utilizaría para obtener los submenús como lo haría para obtener el menú 'Prueba'.

0

Pruebe el siguiente. Obtiene primero el submenú Prueba (índice 2), luego, una vez que lo tiene, le dice que elimine su submenú Test_submenu_3 por posición (también 2).

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