在Win32 API中禁用ComboBox项

时间:2018-03-18 05:12:52

标签: c++ winapi drop-down-menu combobox disabled-control

我想在我的Win32应用程序(C ++)中禁用组合框中的项目。我不太清楚如何做到这一点。我正在努力实现这样的事情:

Disabled combobox item

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

如果你真的需要一个组合框,那么(如@nnspectable所说)你需要做一个自定义绘制控件。基本上,您必须存储一些信息,说明哪些项目被禁用/变灰,并根据它们是否启用来适当地绘制项目。

虽然可能会有一些更简单的方法。这通常使用分割按钮完成。这是具有BS_SPLITBUTTON样式集的按钮。单击按钮的下拉部分时,会发送BCN_DROPDOWN通知。

您通常会通过显示菜单来回应,通常使用TrackPopupMenu将其显示在按钮下方(如果您愿意,可以立即显示在右侧)。这是一个普通菜单,因此您可以根据需要启用,禁用,灰显,使用复选框等项目。

如果你正在使用MFC,它有一个CSplitButton类来包装分割按钮,稍微简化一下代码 - 你可以在创建{时传递菜单和子菜单的标识符{1}}对象,它从那里处理事物。

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

enter image description here

注意:MFC也有一个CSplitButton类。这具有大致相似的功能,但使用起来有点笨拙。如果内存服务,它与旧版本的Windows兼容(但拆分按钮可以回到Vista,所以除非你真的需要支持XP,否则它很好)。