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

时间:2012-01-17 16:14:31

标签: c++ windows mfc listbox ownerdrawn

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

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

那么如何将项目添加到CListBox并同时获取传入的项目数据?我曾尝试使用和不使用LBS_HASSTRINGS。不知道还有什么可以尝试。

1 个答案:

答案 0 :(得分:1)

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

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

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