我有一个列表视图,我想要禁用水平滚动条。
基本上,我知道我的数据都不会超过单列的宽度,但是如果有足够的条目被添加到列表视图中,则会popup垂直滚动条,减小可用宽度,使水平滚动条popup。
我正在考虑如何在垂直滚动条添加之前捕捉消息,然后重新调整列的大小以便留出足够的空间,但是我不知道要做什么。
编辑:
有没有人知道在列表视图中的项目被删除后是否有消息发送? LVN_ITEMCHANGED
似乎只在添加项目后才被发送。 只有在项目被删除之前LVN_DELETEITEM
。
那么我找出了一个解决方案。
虽然有一个错误,如果我只删除一个项目,它不会调整列的大小。
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; }
我仍然喜欢看到一个更好的解决方案,但现在这个工作。
您可以将消息:LVM_SETCOLUMNWIDTH发送到列表视图,并将cx参数设置为LVSCW_AUTOSIZE_USEHEADER