Windows列表视图控件:可靠地检索第一列的宽度

时间:2016-11-02 16:03:43

标签: listview winapi

我正在使用列表视图控件(如here所述),我尝试计算某列和某个列表项的交集的矩形。

我找到了GetSubItemRect(参见here)已经写了很多内容(例如here)。特别是,它使用一个基于索引的索引,仅适用于真正的“子项”,而使用“子项索引”0调用它不会产生第一列的矩形,而是整个项目的矩形。

想到这一切都没有问题,因为我可以解决如下问题:

RECT wholeItem;
GetItemRect(iItem, &wholeItem, LVIR_BOUNDS); // compute whole line
RECT subItem;
GetSubItemRect(iItem, 1, LVIR_BOUNDS, &subItem); // adjust right border to beginning of first subitem
wholeItem.right = subItem.left;

然而,这种方法显然无法处理子项1的列具有零宽度的情况。在这种情况下,subItem是一个rect,其组件全部为0(可能通过SetRectEmpty生成)。

我认为我可以通过执行以下操作来解决此问题:

wholeItem.right = GetColumnWidth(0)

所以,我的问题是:

  • GetSubItemRect的奇怪行为是否记录在案?
  • 我的方式(使用GetColumnWidth)是否可靠?

0 个答案:

没有答案