我有一个列表视图,我想要禁用水平滚动条。
基本上,我知道我的数据都不会超过单列的宽度,但如果有足够的条目添加到列表视图中,则弹出垂直滚动条,减少可用宽度,使水平滚动条弹出
我正在考虑在添加垂直滚动条之前如何捕获消息,然后重新调整列的大小以留出足够的空间,但我不知道我需要捕获哪些消息这样做。
修改
是否有人知道在列表视图中的项目被删除后是否有消息发送? LVN_ITEMCHANGED
似乎仅在添加项目后发送。仅在删除项目之前LVN_DELETEITEM
。
答案 0 :(得分:1)
我找到了一个解决方案 但是有一个错误,如果我只删除一个项目,它不会调整列的大小。
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;
}
我仍然希望看到更好的解决方案,但现在可以使用。
答案 1 :(得分:1)
您可以将消息:LVM_SETCOLUMNWIDTH发送到listview,并将cx param设置为LVSCW_AUTOSIZE_USEHEADER