我使用MF_MENUBARBREAK
进行了一些实验,但有了这个,我只能在菜单的最顶层实现两列。
我想要的是这样一个菜单:
我想要有两列的完整菜单,但第一行有两个菜单(左和右)项。每个其他条目都会占用它自己的整行。这可能吗?
答案 0 :(得分:4)
不,这是不可能的。本机菜单系统不支持“拆分”多列菜单。
如果下拉菜单包含多个列,则整个下拉菜单将包含多个列。否则,所有项目都显示在一列中。
你不能拥有这个(除非你像我一样在Paint中嘲笑它):
相反,在您设置MF_MENUBARBREAK
标志的项目之后的所有项目都将显示在第二列中。例如,如果“正确”项目设置了MF_MENUBARBREAK
标记,则您的菜单将如下所示:
您不能将“一个”到“三个”的项目显示为不在一列或另一列中。如果您在“Right”之前添加了项目(带有MF_MENUBARBREAK
标志的项目),它们将全部位于第一列中,如下所示:
......但他们仍在列中。除了owner-drawing the menus yourself之外没有办法解决这个问题,这比工作更有价值(相信我)。
也许你可以只复制“左”和“右”类别下的编号项目?只要您为每个菜单项指定了唯一的ID,在代码中区分它们就不是问题。
但是你仍然需要找到一些方法来表明“左”和“右”是列标题,并且应该与它们下面的项目区别对待。我想你可以禁用它们和/或用粗体绘制它们,但是仍然不能保证产生直观的UI。
更好的是,我建议将“创意”UI设计强制措施降至最低,只需添加另一个顶级菜单。用户知道如何使用顶级菜单。他们已经掌握了这种心理模型。他们真的不知道如何使用你奇怪的自定义菜单,任何奇怪的东西都可能会让你的用户更频繁地绊倒。
用户也(有点)理解子菜单,因此您仍然可以使用单个顶级菜单,其中“左”和“右”项目本身显示包含您的编号项目的子菜单。但通常的规则适用 - 不要太深入,等等。
在OS X上,我看到过以下菜单结构:
它在那里运行良好,用户已经习惯了它。作为一个喜欢看到正确嵌套并分类的程序员,我非常喜欢它。但是我不确定它对Windows用户来说有多直观,对他们来说这是不寻常的。你必须做一些可用性测试。