那么我制定了一个解决方案。
虽然有一个错误,如果我只删除一个项目,它不会调整列的大小。
case LVN_DELETEITEM:
{
LPNMLISTVIEW listView = (LPNMLISTVIEW) lParam;
// After an item is deleted,
// if there is not a vertical scroll bar and GWL_USERDATA is TRUE,
// resize the column back to normal.
if (!(GetWindowLong(listView->hdr.hwndFrom, GWL_STYLE) & WS_VSCROLL) &&
GetWindowLong(listView->hdr.hwndFrom, GWL_USERDATA) == TRUE)
{
const int ColWidth = ListView_GetColumnWidth(listView->hdr.hwndFrom, 0);
ListView_SetColumnWidth(listView->hdr.hwndFrom, 0, ColWidth + GetSystemMetrics(SM_CXVSCROLL));
SetWindowLong(listView->hdr.hwndFrom, GWL_USERDATA, FALSE);
}
break;
}
case LVN_ITEMCHANGED:
{
LPNMLISTVIEW listView = (LPNMLISTVIEW) lParam;
// After an item is added, if there is a horizontal scrollbar,
// resize the column and set GWL_USERDATA to TRUE.
if (GetWindowLong(listView->hdr.hwndFrom, GWL_STYLE) & WS_HSCROLL)
{
const int ColWidth = ListView_GetColumnWidth(listView->hdr.hwndFrom, 0);
ListView_SetColumnWidth(listView->hdr.hwndFrom, 0, ColWidth - GetSystemMetrics(SM_CXVSCROLL));
SetWindowLong(listView->hdr.hwndFrom, GWL_USERDATA, TRUE);
}
break;
}
我仍然很想看到更好的解决方案,但是现在可以使用。
为什么你不只是不停的最后一列的宽度有限?那么你肯定知道水平滚动条不会显示出来...... – demorge 2012-08-12 18:36:45
因为我只有一个列,并且列分隔符看起来很丑。出于多种原因,它必须处于报告模式。 – Josh 2012-08-12 18:39:39
也许你可以使用'LVM_ISITEMVISIBLE'来检查第一个OR最后一项是否不可见。那么你应该减少列的宽度。并检查每次添加项目或调整大小。 – demorge 2012-08-12 18:44:40