CMFCMenuButton no se cierra
cdialog popupmenubutton (1)
Tengo un CDialog con CFMCMenuButton . cuando lo abro, todo aparece normalmente:
El problema ocurre cuando hago clic en otro lugar para cerrar el menú. El menú parece imposible de cerrar, a menos que el usuario seleccione una opción de este. Y si presiono Escape en el teclado, el cuadro de diálogo se cierra, lo cual es demasiado drástico; Realmente quisiera que cerrara solo el menú.
Sé que podría resolver esto estableciendo su propiedad "Menú OS" en el archivo de recursos en Verdadero (o equivalente, asignando su propiedad m_bOSMenu= TRUE ). Y obtendría:
Como puedes ver en la imagen, las consecuencias son:
- Pierdo los iconos (no muy importante)
-
OnInitMenuPopupalgunas inhabilitaciones de elementos (importantes) hechas porOnInitMenuPopup(nota al margen: la segunda menucolumn también está hecha porOnInitMenuPopupy aparece como debería ser). Si el usuario hace clic en estas opciones, funcionarán y NO DEBERÍAN.
¿Cómo puedo resolver el problema?
La respuesta viene directamente de la fuente de MFC.
El archivo afxmenubutton.cpp en su función CMFCMenuButton::OnShowMenu aconseja utilizar un CDialogEx lugar de un CDialog :
#ifdef _DEBUG
if ((pParent->IsKindOf(RUNTIME_CLASS(CDialog))) && (!pParent->IsKindOf(RUNTIME_CLASS(CDialogEx))))
{
TRACE(_T("CMFCMenuButton parent is CDialog, should be CDialogEx for popup menu handling to work correctly./n"));
}
#endif
Luego cambié mi clase de diálogo para derivar de CDialogEx , ¡y ahora todo funciona perfectamente! Teniendo la propiedad del menú del sistema operativo como False, se muestran los iconos y las opciones deshabilitadas están realmente desactivadas y en gris.
ACTUALIZACIÓN : Parte de la documentación en https://msdn.microsoft.com/en-us/library/Bb983913.aspx