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

标签 c++ winapi mfc menu

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

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

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

最佳答案

I need to display somehow a main menu under this "fat" title bar.

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

By default "native" menus seem to be able to be located only in the top of the client area of the dialog window (or am I wrong here?).

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

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

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

我怀疑,在进行这个项目时,您可能吃得太多了。请记住,几乎没有理由(即使有)绘制自己的标题栏。如您所见,符合平台的标准期望对程序员来说通常更容易,并且更容易被用户接受。

关于c++ - Windows 对话框主菜单的自定义位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9186828/

相关文章:

c++ - MFC ComboBox DrawItem 问题

c++ - 如何在Visual Studio 2008中隐藏这两个控件?

c++ - 将编译器选项std = c++ 11与较旧的编译器选项std = c++ 0x混合可以吗

c++ - Boost C++ 代码未构建,有人可以帮助我进行库链接吗?

c++ - 在 C++ 中声明一个 const BYTE *

windows - 如果同时启用了鼠标和触摸板,如何检测输入设备

c++ - 如何制作包含所有数据文件的mfc项目的独立安装文件

c++ - 我再次对指针感到困惑

c# - 如何将播放视频作为相机输入?

c - 保持 HOOK 运行