CComboBox的禁用项目
介绍
这个类扩展了通常的组合框,可以禁用某些项。这些项目列在组合框中,但用户无法选择它们。
基本推导分为四个部分:
- 通过使组合框为owner-draw,我们可以用不同的颜色绘制禁用的项。覆盖所包含的列表框的WM_LBUTTONUP处理程序,我们实际上可以禁用对禁用项目的单击。重写CharToItem处理程序,我们可以禁用选择禁用项目的键盘。最后,通过对反映的CBN_SELENDOK做出反应,我们可以确保一个被禁用的项目没有被选中(由于CExtendedComboBox实现中的bug)。
我们敦促读者仔细研究代码,以理解CExtendedComboBox类的内部结构。
使用WM_CTLCOLORLISTBOX消息进行子类化来自另一篇文章。
如何使用类
CExtendedComboBox类是CComboBox的一个临时替换。你只需#include "ExtendedComboBox。而不是CComboBox类,你使用cdialog派生类的CExtendedComboBox类。
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日:初始版本
许可证
本文没有附带明确的许可,但可能包含文章文本或下载文件本身的使用条款。如果有疑问,请通过下面的讨论区联系作者。可以在这里找到作者可能使用的许可证列表。
本文转载于:http://www.diyabc.com/frontweb/news13561.html