如何为所有者绘制variablesCListBox(MFC)

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

我试着调用SetRedraw(FALSE)希望能推迟度量请求,但没有运气。

那么如何将一个项目添加到CListBox中,并同时获取传入的项目数据呢? 我已经试过,没有LBS_HASSTRINGS。 不知道还有什么要尝试。

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

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

好处在于,在调用MeasureItem()时,字符串和项目数据都可用。 缺点是,如果你的列表是排序的,你将不得不实现CompareItem() ,并且在删除项目和列表框控件被销毁之前释放这两个包装。