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

带禁用项目的 CListBox

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.88/5 (7投票s)

2000年4月4日

viewsIcon

88138

downloadIcon

1317

带有禁用项目的列表框。

  • 下载源代码文件 - 2 Kb
  • 引言

    有时我需要一个内容固定但其中一些项目被禁用的列表框。 我尝试过查找这样的类,但从未成功。 因此,我决定自己创建这个类。


    类 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_enableddata=stored_data>>1 来存储和恢复元素的数据。)通过重写该方法,您可以改变行为(甚至使其选择依赖!)。

    该代码适用于所有类型的列表框选择。

    该代码不会尝试禁用选择本身。 它只是将禁用的项目绘制为禁用的状态。 如何处理选择禁用的项目由程序员决定。

    欢迎提出意见。


    © . All rights reserved.