65.9K
CodeProject 正在变化。 阅读更多。
Home

带禁用项目的 CComboBox

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (4投票s)

2000年4月4日

CPOL
viewsIcon

233500

downloadIcon

2397

带禁用项目的组合框

引言

这个类扩展了标准的组合框,使其具有禁用某些项目的功能。这些项目会列在组合框中,但用户无法选择它们。

基本实现包含四个部分

  1. 通过使组合框变为所有者绘制,我们可以用不同的颜色绘制禁用的项目。
  2. 通过重写包含列表框的 WM_LBUTTONUP 处理程序,我们可以实际禁用对禁用项目的点击。
  3. 通过重写 CharToItem 处理程序,我们可以禁用通过键盘选择禁用的项目。
  4. 最后,通过响应反射的 CBN_SELENDOK,我们可以确保禁用的项目没有被 CExtendedComboBox 实现中的错误选中。

强烈建议读者仔细研究代码,以理解 CExtendedComboBox 类的内部原理。

使用 WM_CTLCOLORLISTBOX 消息进行子类化,源自另一篇文章 此处

如何使用该类

CExtendedComboBox 类是 CComboBox 的直接替代品。你只需 #include "ExtendedComboBox.h",并在你的 CDialog 派生类中使用 CExtendedComboBox 类,而不是 CComboBox 类。

CExtendedComboBox 的行为可以通过重写以下内容进行自定义

virtual BOOL IsItemEnabled(UINT) const;

此函数将项目索引作为参数(该函数必须显式检查该参数是否确实在范围内)。它返回 TRUE/FALSE。默认实现使用项目数据的最低有效位。

该类应该适用于所有组合框样式(CBS_SIMPLECBS_DROPDOWNCBS_DROPLIST),尽管它只用 CBS_DROPDOWN 进行了彻底测试。组合框必须标记为 CBS_OWNERDRAWFIXEDCBS_OWNERDRAWVARIABLE 是可能的,但需要对代码进行一些更改)和 CBS_HASSTRINGS

我期待听到任何评论。

历史

  • 2000年4月15日:初始版本

许可证

本文没有明确的许可证,但可能包含在文章文本或下载文件中本身的使用条款。如有疑问,请通过下面的讨论区联系作者。可以在 此处 找到作者可能使用的许可证列表。

© . All rights reserved.