在Windows XP上自定义绘制的列表视图
C++ - ListView Custom Drawn on Windows XP
我有ListView,其中项目完全使用我的代码绘制。当然,我使用NMLVCUSTOMDRAW提供的数据主要是RECTs。有两个矩形p->nmcd。rc和p->rcText,第一个携带有效信息,另一个总是0。这个问题就是nmcd。rc在Windows XP上不包含有效的rect,我得到0,1,0,2或类似的东西。
由于没有工作,我尝试使用ListView_GetItemIndexRect在Win XP上失败,而它在Win 7/10上工作。
看ListView_GetItemIndexRect的msdn页面,我可以看到,显然它只适用于Vista+。与此同时,在Vista+中列出的其他一些ListView函数在Windows XP中也可以正常工作。
Windows XP在我的程序的用户中很少见,但我仍然希望它能完美地运行。我自己绘制完整的列表视图肯定会解决这个问题,但这是一个死胡同。查看本页第一条评论:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb774778%28v=vs.85%29.aspx处理Windows XP上的子项预绘制消息(可能全部))处理程序接收不正确的顶部和底部NMLVCUSTOMDRAW::nmcd中的值。Rc有时是0,有时是0没有更新,因为以前的处理程序调用(所以基本上的想法是它们未被comtl32调用者初始化)。为了得到处理程序必须显式获取的正确子项位置使用单独消息/调用的矩形:
RECT Position; ListView.GetSubItemRect((INT) pHeader->nmcd.dwItemSpec, pHeader->iSubItem, LVIR_BOUNDS, &Position);
相关文章:
- 列表视图更改选择颜色
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 列表视图项的替代颜色
- 如何将 QString 的 QList 分配给列表视图?
- 如何修复列表视图中的错误?,封装控件时无法选择任何项
- 如何在 c++ 中从列表视图中获取值
- Qml 列表视图在重置模型时保留视图
- 创建列表视图后无法更改列表视图中的列宽
- 如何在调整列表视图大小时将标题宽度设置为等于其列表视图控件宽度
- 如何更改列表视图的边框颜色
- Qt:将 c++ 中的列表连接到 QML 中的列表视图
- 如何绑定到列表视图的 OnItemSelectionChanged
- 列表视图最初不显示数据
- 从C++访问列表视图委托的文本
- LVM_GETNEXTITEM在列表视图中找不到项目
- UWP 列表视图占用的高度超过可用高度
- 如何在移动列表视图中添加滚动条?并且用户只能垂直滚动特定区域
- C++ win32 列表视图列
- QML 列表视图和密钥导航 - 处理单个密钥事件
- 循环访问列表视图项 win32 api