Как скрыть / свернуть главное меню в приложении win32 / mfc

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

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

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

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

Спасибо


person Nuno    schedule 11.10.2011    source источник


Ответы (4)


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

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

person Raymond Chen    schedule 26.10.2011
comment
Я ожидал примера настраиваемого элемента управления, который выглядит как меню :) но ладно - person Nuno; 03.11.2011
comment
Небольшая охота вокруг MSDN быстро привела к Как создать строку меню в стиле Internet Explorer. Поисковые системы классные! - person Raymond Chen; 03.11.2011

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

person mox    schedule 14.03.2012
comment
Здесь возникает следующая проблема: этот метод влияет на состояние меню в приложениях, написанных для Windows Vista и более ранних версий. - person Nuno; 15.03.2012

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

person user2457260    schedule 08.08.2016

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

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

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

person Oliver Zendel    schedule 16.04.2013