带禁用项目的 CComboBox






4.50/5 (4投票s)
带禁用项目的组合框
引言
这个类扩展了标准的组合框,使其具有禁用某些项目的功能。这些项目会列在组合框中,但用户无法选择它们。
基本实现包含四个部分
- 通过使组合框变为所有者绘制,我们可以用不同的颜色绘制禁用的项目。
- 通过重写包含列表框的
WM_LBUTTONUP
处理程序,我们可以实际禁用对禁用项目的点击。 - 通过重写
CharToItem
处理程序,我们可以禁用通过键盘选择禁用的项目。 - 最后,通过响应反射的
CBN_SELENDOK
,我们可以确保禁用的项目没有被CExtendedComboBox
实现中的错误选中。
强烈建议读者仔细研究代码,以理解 CExtendedComboBox
类的内部原理。
使用 WM_CTLCOLORLISTBOX
消息进行子类化,源自另一篇文章 此处。
如何使用该类
CExtendedComboBox
类是 CComboBox
的直接替代品。你只需 #include "ExtendedComboBox.h"
,并在你的 CDialog
派生类中使用 CExtendedComboBox
类,而不是 CComboBox
类。
CExtendedComboBox
的行为可以通过重写以下内容进行自定义
virtual BOOL IsItemEnabled(UINT) const;
此函数将项目索引作为参数(该函数必须显式检查该参数是否确实在范围内)。它返回 TRUE
/FALSE
。默认实现使用项目数据的最低有效位。
该类应该适用于所有组合框样式(CBS_SIMPLE
、CBS_DROPDOWN
和 CBS_DROPLIST
),尽管它只用 CBS_DROPDOWN
进行了彻底测试。组合框必须标记为 CBS_OWNERDRAWFIXED
(CBS_OWNERDRAWVARIABLE
是可能的,但需要对代码进行一些更改)和 CBS_HASSTRINGS
。
我期待听到任何评论。
历史
- 2000年4月15日:初始版本
许可证
本文没有明确的许可证,但可能包含在文章文本或下载文件中本身的使用条款。如有疑问,请通过下面的讨论区联系作者。可以在 此处 找到作者可能使用的许可证列表。