我该如何在MFC中创建一个菜单,其中有一行包含两个项目?

3

我进行了一些关于MF_MENUBARBREAK的实验,但是只能在菜单的最顶层实现两列。

我想要的是这样的菜单:

我不是想让整个菜单都有两列,而是在第一行中有两个菜单项(左和右)。其他的每个条目将占据其自己的整行。这可能吗?

1个回答

4

不,这是不可能的。本地菜单系统不支持“分割”多列菜单。

如果下拉菜单有多列,则整个下拉菜单将有多列。否则,所有项目都显示在单列中。

除非你像我刚才所做的那样在Paint中模拟它,否则你无法拥有它:

     

相反,所有在你设置了MF_MENUBARBREAK标志的项目之后的项目都将显示在第二列中。例如,如果“右”项目设置了MF_MENUBARBREAK标志,则菜单将如下所示:

     

您无法使“一”到“三”项看起来好像不在任何一列中。如果您在“Right”(带有MF_MENUBARBREAK标志的那个)之前添加这些项目,则它们将全部位于第一列,如下所示:

     

...但它们仍然在同一列中。除非自己绘制菜单,否则没有其他选择,这需要的工作量比它所值得的还要大(相信我)。

也许你可以只是在“左侧”和“右侧”类别下复制编号项目?只要为每个菜单项分配一个独特的ID,在代码中区分它们就不是问题。

     

但是,您仍然需要找到一种方法来指示“左”和“右”是列标题,并且应该与它们下面的项目不同对待。我想您可以禁用它们和/或以粗体绘制它们,但这仍不能保证产生直观的用户界面。
更好的做法是,我建议将您的“创意”UI设计冲动最小化,并添加另一个顶级菜单。用户知道如何使用顶级菜单。他们已经掌握了这个心理模型。他们真的不知道如何使用您奇怪的自定义菜单,任何奇怪的东西都有可能经常使您的用户出错。

     

用户也(有点)理解子菜单,因此您仍然可以拥有一个单一的顶级菜单,其中包含“左”和“右”项目,它们本身显示包含编号项目的子菜单。但通常的规则适用-不要嵌套太深等。

     

在 OS X 上,我看到了类似以下菜单结构的东西:

     

在那些习惯使用它的用户中,它运作良好。作为一个喜欢看到事物正确嵌套和分类的程序员,我自己也很喜欢它。但我不确定对于Windows用户来说它有多直观,因为这对他们来说可能是很不寻常的。你需要进行一些可用性测试。

我没有参考,但菜单是一个弹出式的,在某些情况下,左边和右边不应该显示。我最终做了一个菜单,第一列有左和右选项;第二列有数字,就像http://i.imgur.com/RT8yE.png?1上的图片一样。无论如何,感谢您的帮助。 - sergiol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接