CMFCMenuButton не закрывается

У меня есть CDialog с CFMCMenuButton, когда я его открываю, все выглядит нормально:

CDialog с кнопкой меню

Проблема возникает, когда я щелкаю в другом месте, чтобы закрыть меню. Меню кажется незапираемым, если пользователь не выберет его опцию. И если я нажимаю Escape на клавиатуре, диалоговое окно закрывается само по себе, что слишком резко; Я бы очень хотел, чтобы он закрывал только меню.

Я знаю, что мог бы решить эту проблему, установив для своего свойства "OS Menu" в файле ресурсов значение True (или, что то же самое, назначив его свойство m_bOSMenu= TRUE). И я бы получил:

CDialog с кнопкой меню со свойством OS Menu, установленным в 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

Другие вопросы по тегам