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)
-
OnInitMenuPopup
algunas inhabilitaciones de elementos (importantes) hechas porOnInitMenuPopup
(nota al margen: la segunda menucolumn también está hecha porOnInitMenuPopup
y 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