CMFCMenuButton не закрывается
У меня есть CDialog
с CFMCMenuButton
, когда я его открываю, все выглядит нормально:
Проблема возникает, когда я щелкаю в другом месте, чтобы закрыть меню. Меню кажется незапираемым, если пользователь не выберет его опцию. И если я нажимаю Escape на клавиатуре, диалоговое окно закрывается само по себе, что слишком резко; Я бы очень хотел, чтобы он закрывал только меню.
Я знаю, что мог бы решить эту проблему, установив для своего свойства "OS Menu" в файле ресурсов значение True (или, что то же самое, назначив его свойство m_bOSMenu= TRUE
). И я бы получил:
Как вы можете видеть на изображении, последствия:
- Я теряю значки (не очень важно)
- Я теряю некоторые вещи (важные), сделанные
OnInitMenuPopup
(примечание: второй столбец меню такжеOnInitMenuPopup
и, похоже, так и должно быть). Если пользователь нажимает на эти параметры, они будут работать, и они НЕ ДОЛЖНЫ.
Как я могу решить проблему?
1 ответ
Ответ приходит прямо из источника MFC.
Файл afxmenubutton.cpp
в его CMFCMenuButton::OnShowMenu
Функция советует использовать CDialogEx
вместо 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
Затем я изменил свой класс диалога, чтобы получить из CDialogEx
и теперь все работает отлично! Если для свойства "Меню ОС" установлено значение "Ложь", отображаются значки, а отключенные параметры действительно отключены и выделены серым цветом!
ОБНОВЛЕНИЕ: Некоторая документация на https://msdn.microsoft.com/en-us/library/Bb983913.aspx