我目前有一些工具栏按钮,侧面有一个小箭头(TBSTYLE_EX_DRAWDDARROWS
),点击后会导致弹出的上下文菜单显示在按钮下方。这是通过构建自定义弹出菜单并调用TrackPopupMenu
来完成的。
客户端现在希望能够在关闭之前从菜单中选择多个选项,以便可以修改多个选项,而无需重新打开菜单并等待每次更改之间的中间重绘。
例如:
我能想到的最好的方法是多次调用TrackPopupMenu
来重新显示菜单。当你选择一个项目时,这会使菜单“闪烁”,并且可能需要我启动一个线程来执行超时,我宁愿避免。
答案 0 :(得分:3)
而不是菜单,放置一个带有选项的对话框。对话框可以轻松完成所有必需的操作。
单击它时未关闭的菜单似乎不对。一个单独关闭的对话框似乎也是错误的,但它可能是两个邪恶中最少的。
编辑:如果我在微软学到了什么,那就不要试图对抗默认行为了。如果你这样做,你会遇到麻烦。
如果您正在动态构建菜单,我可以看到自动调整大小是如何方便的,但是在对话框中也不难做到 - 使对话框真的很大并且在它变得可见之前,枚举孩子并采取联合他们所有的矩形,然后调整大小。检查边界以确保它们在屏幕上只是使用OffsetRect的几个if语句。复选框很简单;图标少了,但还不错。
一个易于添加的附加增强功能是双击即可立即关闭对话框。
答案 1 :(得分:1)
按照@Mark Ransom的回答,您应该设置一个对话框。但是你可以使对话框无模式,并在你点击它之外使它自己关闭(即对话框失去焦点)。这样它可能更像菜单。
请注意,普通菜单永远不会自行消失,您必须单击菜单外的某个位置(或其中一个选项)才能使其消失。