带禁用项目的 CListBox






3.88/5 (7投票s)
2000年4月4日

88138

1317
带有禁用项目的列表框。
引言
有时我需要一个内容固定但其中一些项目被禁用的列表框。 我尝试过查找这样的类,但从未成功。 因此,我决定自己创建这个类。
类 CExtendedListBox
该类的源文件可在本文顶部下载。 要使用该类,只需#include "ExtendedListBox.h"
并用 CExtendedListBox
代替 CListBox
在您的 CDialog
派生类中使用即可。(该类未用 Create()
构造进行测试;它已用 DDX_Control()
构造进行测试,并且很可能也能很好地与 SubclassWindow()
一起工作。)可以通过重写虚拟方法来定制类的行为
virtual BOOL IsItemEnabled(UINT) const;
此方法将项目编号作为参数(代码应显式检查参数是否超出范围)并返回 TRUE/FALSE。 默认实现使用项目数据的最低有效位进行此逻辑。(很容易看出 LSB 可用于指针数据,因为结构体的指针是 DWORD
对齐的;对于整数数据,您可以执行 data_to_store=(data<<1)|is_enabled
和 data=stored_data>>1
来存储和恢复元素的数据。)通过重写该方法,您可以改变行为(甚至使其选择依赖!)。
该代码适用于所有类型的列表框选择。
该代码不会尝试禁用选择本身。 它只是将禁用的项目绘制为禁用的状态。 如何处理选择禁用的项目由程序员决定。
欢迎提出意见。