禁用列表视图中的水平滚动条
Disable horizontal scroll bar in list view
我有一个列表视图,我想在其中禁用水平滚动条。
基本上,我知道我的任何数据都不会超过单列的宽度,但是如果将足够的条目添加到列表视图中,则会弹出垂直滚动条,从而减小可用宽度,从而弹出水平滚动条。
我在考虑如何在添加垂直滚动条之前捕获消息,然后重新调整列的大小以腾出足够的空间,但我不知道我需要捕获什么消息才能执行此操作。
编辑:
有谁知道删除列表视图中的项目后是否发送了消息? LVN_ITEMCHANGED
似乎仅在添加项目后发送。并且仅在删除项目之前LVN_DELETEITEM
。
您可以发送消息:LVM_SETCOLUMNWIDTH到列表视图,并将 cx 参数设置为 LVSCW_AUTOSIZE_USEHEADER
好吧,
我制定了一个解决方案。
不过有一个错误,如果我只删除一个项目,它不会调整列的大小。
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;
}
我仍然希望看到更好的解决方案,但这目前有效。
相关文章:
- QScrollArea:由垂直滚动条引起的水平滚动条
- 跟踪滚动条上的鼠标事件
- 如何在不使用滚动条的情况下使视图更改
- 通过水平滚动条更改标签
- Qt:无法直接为带有子项的小部件添加滚动条
- OnVScroll : 从 CSpinButtonCtrl 或垂直滚动条调用?
- win32 滚动条在 C/C++ 程序中不起作用
- 将水平滚动条添加到控制台
- QListWidget 水平滚动条会导致选择消失在视野之外
- 滚动条缩略图跟踪长度 基于图像的水平适合调整窗口大小时出现问题
- 完全禁用QSCrollarea中的水平滚动,而不仅仅是条
- 隐藏 mfc 水平滚动条
- 禁用列表视图中的水平滚动条
- C++ 具有水平滚动条的 MFC 列表控件
- 使用水平滚动条手动设置 MFC CComboBox 下拉列表高度
- Qt - 无效使用不完整的类型 'class QScrollBar' - 为文本编辑小部件添加水平滚动条
- 有没有人使用水平滚动条中的"scroll arrows"来滚动位置?
- 添加水平滚动条来调整窗口对话框的大小
- 如何知道水平滚动条是否显示在QPlainTextEdit继承的类中
- 如何在MFC中禁用CListCtrl的水平滚动条