如何为所有者绘制变量 CListBox (MFC) 设置高度

Posted

技术标签:

【中文标题】如何为所有者绘制变量 CListBox (MFC) 设置高度【英文标题】:How to set height for owner draw variable CListBox (MFC) 【发布时间】:2012-01-17 16:14:31 【问题描述】:

我有一个高度可变的所有者绘制 ListBox 控件。当我调用 AddString 时,会发送一条 MeasureItem 消息,要求我告诉 Windows 项目的大小。问题是,代码还没有机会调用 SetItemData,所以代码还不能确定大小。

我曾尝试调用 SetRedraw(FALSE),希望这会推迟测量请求,但没有运气。

那么如何在 CListBox 中添加一个项目并同时获取传入的项目数据呢?我尝试过使用和不使用 LBS_HASSTRINGS。不知道还能尝试什么。

【问题讨论】:

【参考方案1】:

如果您的列表框控件不具有LBS_HASSTRINGS 样式,则指向AddString() 的指针参数不会被视为字符串,而是被视为项目数据(请参阅LB_ADDSTRING 文档中的备注部分)。

因此,如果您的列表项同时包含一个字符串和一些项数据,您可以将这两条信息包装在一个结构或一个类中,并将指向该包装器的指针传递给AddString()

好处是在调用MeasureItem() 时字符串和项目数据都将可用。不利的一面是,如果您的列表已排序,则必须实现 CompareItem(),并在删除项目时和销毁列表框控件之前释放包装器。

【讨论】:

太棒了——我知道那里一定有什么诡计:)

以上是关于如何为所有者绘制变量 CListBox (MFC) 设置高度的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法在 CListBox 中获取所选项目? MFC

(MFC) CListBox -> 编辑列表中的项目?

MFC C++ CListBox 获取选中项

如何为 MFC 中的多个按钮编写一个消息处理程序?

mfc clistbox 函数drawitem需要打开啥属性

MFC CListBox AddString - 防止自动排序