【问题标题】:Custom Location of the Main Menu of Windows DialogWindows 对话框主菜单的自定义位置
【发布时间】:2012-02-08 01:57:06
【问题描述】:

有很多关于自定义对话框窗口主菜单的文章,包括“自定义绘制”菜单。但他们似乎都没有回答我的问题。

我有一个(无边框)窗口,它有一个手工绘制的自定义标题栏:

我需要在这个“胖”标题栏下以某种方式显示一个主菜单。我怎么能做到这一点,使用 MFC?默认情况下,“本机”菜单似乎只能位于对话窗口客户区域的顶部(或者我在这里错了吗?)。我的问题有什么解决办法吗? 如果有人可以提供一些与我的问题相关的链接,我将不胜感激!我见过很多实现这一点的产品,例如 Ontrack 想到了,但从未遇到任何关于如何实现这一点的解释。 谢谢!

【问题讨论】:

    标签: c++ winapi mfc menu


    【解决方案1】:

    我需要在这个“胖”标题栏下以某种方式显示一个主菜单。

    根据您发布的图片,这正是它正在绘制的位置

    默认情况下,“本机”菜单似乎只能位于对话窗口客户区的顶部(或者我错了吗?)。

    不,这是正确的。菜单将自动绘制在菜单栏所属的位置:窗口顶部,标题栏下方。

    您决定通过重新实现非客户区来破坏默认设置并将应用程序的可用性扔到地狱。这意味着您不能依赖 Windows 为您绘制这些元素。相反,您需要自己负责绘制所有这些东西,这需要您编写代码来执行此操作。我不知道“Ontrack”是什么,但任何这样做的应用程序都是所有者绘制它的菜单。

    另一个流行的选项(Internet Explorer 使用了一段时间)是使用 rebar 控件创建您自己的类似菜单的对象。这具有集成到现有工具栏控件并允许用户根据需要重新排列项目的优点。就像编写自己的菜单控件一样,它的缺点是不符合标准平台约定和用户期望(尽管它可能比您自己想出的要好得多)。有一篇操作方法文章here on MSDN

    我怀疑在进行这个项目时,您可能已经咬得比咬得还多。请记住,几乎没有(即使那样)绘制自己的标题栏的理由。如您所见,符合您平台的标准预期通常对程序员来说更容易,并且更容易受到用户的欢迎。

    【讨论】:

    • 科迪,感谢您的详细回答。我将深入研究这些菜单工具栏,这似乎是我需要的。这个“截图”实际上是在 Photoshop 中制作的,以显示我想要得到的内容:-)。
    猜你喜欢
    • 2016-06-25
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多