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