在 Win32 中禁用 ComboBox 项 API

Disabling a ComboBox item in Win32 API

我想在我的 Win32 应用程序 (C++) 的组合框中禁用一个项目。我不太清楚该怎么做。我正在尝试实现如下所示的目标:

注意 CollectionItem2 和 3 是如何变灰的。

非常感谢任何帮助!

如果您确实为此需要一个组合框,那么(如@IInspectable 所说)您将需要执行自定义绘制控件。基本上,您必须存储一些信息,说明哪些项目是 disabled/grayed,并根据它们是否启用来适当地绘制这些项目。

虽然可能有更简单的方法。这通常使用拆分按钮来完成。这是设置了 BS_SPLITBUTTON 样式的按钮。单击按钮的 drop-down 部分时,它会发送 BCN_DROPDOWN 通知。

您通常会通过显示菜单来响应,通常使用 TrackPopupMenu 将其显示在按钮正下方(如果您愿意,也可以立即显示在其右侧)。这是一个普通菜单,因此它可以启用、禁用、变灰、具有复选框等项目,如您所愿。

如果您使用的是 MFC,它有一个 CSplitButton class 来包装拆分按钮,稍微简化代码——您可以传递菜单的标识符和 sub-menu 当你创建 CSplitButton 对象时,它会从那里处理事情。

示例结果可能看起来很眼熟:

注:MFC还有一个CMfcMenuButtonclass。这具有大致相似的功能,但使用起来有些笨拙。如果没记错的话,它与旧版本的 Windows 兼容(但是拆分按钮回到了 Vista,所以没关系,除非你真的需要支持 XP)。