Windows对话框主菜单的自定义位置

时间:2012-02-08 01:57:06

标签: c++ winapi mfc menu

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

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

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

1 个答案:

答案 0 :(得分:1)

  

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

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

  

默认情况下,“原生”菜单似乎只能位于对话框窗口客户区的顶部(或者我在这里错了?)。

不,那是对的。菜单栏将自动绘制菜单:位于窗口顶部,标题栏下方。

你已经决定搞乱默认设置并通过重新实现非客户区来将应用程序的可用性推向地狱。这意味着您不能依赖Windows为您绘制这些元素。相反,您需要自己承担绘制所有这些事情的责任,这需要您编写代码来执行此操作。我不知道“Ontrack”是什么,但任何执行此操作的应用程序都是所有者绘制其菜单。

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

我怀疑在进行这个项目时你可能比你咀嚼的更多。请记住,几乎没有(甚至是那个)绘制自己标题栏的理由。正如您所看到的,符合您平台的标准期望通常对程序员来说更容易,并且您的用户会更好地接受。