gpt4 book ai didi

c++ - Win32 (C++) :- How to make a list item collapsible

转载 作者:搜寻专家 更新时间:2023-10-31 00:29:43 25 4
gpt4 key购买 nike

我有一个列表框,其中有多个列表项。我想实现类似如果我们单击列表项,它会折叠并显示所单击项的摘要:

enter image description here

我在网上搜索了好久,没有找到好的解决办法。我对 Win32 很陌生。关于如何解决这个问题的任何建议,比如我应该使用哪个控件。任何帮助将不胜感激。

最佳答案

标准ListBoxListView控件本身不支持展开/折叠项目,但是可以通过一些额外的工作在 ListBox 中实现它。

为列表框提供 LBS_OWNERDRAWVARIABLE list box style允许列表包含不同高度的项目。当一个新项目被添加到列表中时,ListBox 将发送一个 WM_MEASUREITEM。向其父窗口发送消息,询问项目的初始高度。根据项目是显示为折叠还是展开返回适当的高度。

将项目添加到列表后,您可以向列表框发送 LB_SETITEMHEIGHT消息为该项目分配一个新的高度,基于它现在是应该显示为折叠还是展开。然后使 ListBox 无效以触发项目的重绘。

LBS_OWNERDRAW... 样式要求您在 ListBox 发送 WM_DRAWITEM 时手动绘制每个列表项。向其父窗口发送消息。您可以根据需要在提供的 HDC 上绘制请求的项目,例如 DrawText()函数,根据项目的文本当前显示为折叠还是展开来配置其参数。还可以使用消息本身提供的状态信息来根据需要配置 HDC 的字体和背景/前景色(在呈现处于选中和聚焦状态的项目时尤其重要)。

有了它,您剩下要做的就是让您的点击处理程序确定被点击项目的索引(通过 GetMessagePos()ScreenToClient()LB_ITEMFROMPOINT ),然后为它分配一个新的高度基于其新的展开/折叠状态,并让生成的重绘相应地绘制新文本。

关于c++ - Win32 (C++) :- How to make a list item collapsible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39827440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com