【问题标题】:How to hide/collapse main menu in a win32/mfc application如何在 win32/mfc 应用程序中隐藏/折叠主菜单
【发布时间】:2011-12-05 03:46:48
【问题描述】:

我一直对我们如何实现这一点很感兴趣(使用 alt 键隐藏/显示主菜单),现在一些应用程序经常这样做。真正让我满意的是带有这个插件的visual studio 2010: http://visualstudiogallery.msdn.microsoft.com/bdbcffca-32a6-4034-8e89-c31b86ad4813?SRC=VSIDE

(firefox 也这样做,但我认为那是不同的方式)

谁能解释一下如何实现这一点,或者如果您知道任何示例项目可以证明这一点,请告诉我。

(我在堆栈中的一些回复中可以看到,我们必须在隐藏时销毁菜单并在显示时创建它?!但这似乎有点糟糕的解决方案......)

谢谢

【问题讨论】:

    标签: c++ menu hide collapse win32gui


    【解决方案1】:

    SetMenu 函数允许您在窗口中添加/删除菜单。它不会破坏菜单。

    请注意,大多数具有动态菜单隐藏/显示行为的应用程序并没有真正显示菜单。他们正在展示一个看起来像菜单的自定义控件。

    【讨论】:

    【解决方案2】:

    您还可以查看MFC support for auto hiding menus。我使用了这种技术,效果非常好。

    【讨论】:

    • 这有以下问题:“此方法会影响为 Windows Vista 及更早版本编写的应用程序中的菜单状态。”
    【解决方案3】:

    在 CMainFrame::OnCreate 我做了 m_wndMenuBar.ShowWindow(SW_HIDE); 这实际上在我们的项目中运行良好

    【讨论】:

      【解决方案4】:

      我偶然发现了一个相关的坑洼,它会在未经您同意的情况下显示隐藏的主框架:

      每当 MDI 应用程序中子窗口的焦点发生变化(例如,由于在其中单击鼠标右键),函数CMDIChildWnd::OnMDIActivate 将被调用,该函数依次显示主菜单(即使它之前已被删除或销毁) ) 的 MDI 应用程序。 这基本上是通过从底层的 CMDIChildWnd m_hMenuShared 变量中添加保存的主手册来工作的。

      为了防止这种情况,一个快速而肮脏的技巧是将所有子框架的 m_hMenuShared 设置为 NULL(它在 CMDIChildWnd 中受到保护,因此需要自定义派生的 CMDIChildWnd 子类)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2010-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多