我有一个可变高度所有者绘制 ListBox 控件。当我调用 AddString 时,会发送一条 MeasureItem 消息,要求我告诉 Windows 项目的大小。问题是,代码还没有机会调用 SetItemData,所以代码还不能确定大小。
我试过调用 SetRedraw(FALSE) 希望这会推迟测量请求,但没有运气。
那么如何将一个项目添加到 CListBox 并同时获取传入的项目数据呢?我尝试过使用和不使用 LBS_HASSTRINGS。不知道还有什么可以尝试的。
我有一个可变高度所有者绘制 ListBox 控件。当我调用 AddString 时,会发送一条 MeasureItem 消息,要求我告诉 Windows 项目的大小。问题是,代码还没有机会调用 SetItemData,所以代码还不能确定大小。
我试过调用 SetRedraw(FALSE) 希望这会推迟测量请求,但没有运气。
那么如何将一个项目添加到 CListBox 并同时获取传入的项目数据呢?我尝试过使用和不使用 LBS_HASSTRINGS。不知道还有什么可以尝试的。
如果您的列表框控件没有LBS_HASSTRINGS
样式,则指针参数 toAddString()
不被视为字符串,而是项目数据(请参阅LB_ADDSTRING文档中的备注部分)。
因此,如果您的列表项同时包含字符串和某些项数据,则可以将这两条信息包装在结构或类中,并将指向该包装器的指针传递给AddString()
.
好处是在调用时字符串和项目数据都将可用MeasureItem()
。不利的一面是,如果您的列表已排序,则您必须实施CompareItem()
,并在删除项目时和销毁列表框控件之前释放包装器。