如何为所有者绘制变量 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) 设置高度的主要内容,如果未能解决你的问题,请参考以下文章