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

原文地址:https://www.cnblogs.com/Dincat/p/13477437.html