Как скрыть / свернуть главное меню в приложении win32 / mfc - PullRequest
0 голосов
/ 11 октября 2011

Меня всегда интересовало, как мы можем это сделать (скрыть / показать главное меню с помощью клавиши alt), и теперь некоторые приложения делают это очень часто.Один, который действительно радует меня, это Visual Studio 2010 с этим плагином: http://visualstudiogallery.msdn.microsoft.com/bdbcffca-32a6-4034-8e89-c31b86ad4813?SRC=VSIDE

(Firefox также делает это, но я думаю, что это по-другому)

Может кто-нибудь объяснить мне, какэто может быть достигнуто или, если вам известен какой-либо пример проекта, демонстрирующий это, пожалуйста, скажите мне.

(что я вижу в некоторых ответах здесь, в стеке, так это то, что мы должны уничтожить меню, когда нужно скрыть и создатьэто когда показывать ?! но это кажется немного плохим решением ...)

Спасибо

Ответы [ 4 ]

3 голосов
/ 26 октября 2011

Функция SetMenu позволяет добавлять / удалять меню из окна. Не разрушает меню.

Обратите внимание, что большинство приложений с динамическим меню скрытия / отображения не отображают меню. Они показывают пользовательский элемент управления, который выглядит как меню.

1 голос
/ 08 августа 2016

в CMainFrame :: OnCreate я сделал m_wndMenuBar.ShowWindow (SW_HIDE); что на самом деле прекрасно работает в нашем проекте

1 голос
/ 14 марта 2012

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

0 голосов
/ 16 апреля 2013

Я наткнулся на соответствующее падение ямы, которая покажет скрытый основной кадр без вашего согласия:

Всякий раз, когда фокус для дочернего окна в приложении MDI изменяется (например, из-за щелчка правой кнопкой мыши в нем), вызывается функция CMDIChildWnd::OnMDIActivate, которая, в свою очередь, показывает главное меню (даже если оно было удалено или уничтожено ранее). ) приложения MDI. Это работает в основном путем добавления сохраненного основного руководства из базовой переменной CMDIChildWnd m_hMenuShared.

Быстрая и грязная попытка предотвратить это, установив m_hMenuShared в NULL (он защищен в CMDIChildWnd, так что для этого требуется собственный дочерний класс CMDIChildWnd) для всех дочерних фреймов.

...