禁用 HSCROLL 的 CListCtrl - 不能 select 最后一个可见项目
CListCtrl with HSCROLL disabled - cannot select last visible item
我有一个带有 CListCtrl 的简单对话框。列表控件在报表视图中,只有一列。
我通过覆盖 OnNcCalcSize() 函数禁用了列表的水平滚动
void CMyListCtrl::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS * lpncsp)
{
// disable horizontal scroll bar
ModifyStyle(WS_HSCROLL, 0);
CListCtrl::OnNcCalcSize(bCalcValidRects, lpncsp);
}
我正在通过处理 NM_CLICK 消息来捕获选择更改,但是由于某种原因,在单击列表中最后一个可见项时不会调用它。垂直滚动条的底部箭头最初也是不可见的,当我点击它时它也没有滚动。基本上红色方块里的都没有收到点击消息
我很确定这是因为我禁用了水平滚动条,因为它几乎就是水平滚动条 应该 .[=14= 的区域]
还有其他人看过吗?有什么方法可以捕获此区域中的点击消息?
我找到了一种解决方法,方法是在 OnNcCalcSize() 中将列的大小调整为列表控件的工作区宽度
void CMyListCtrl::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS * lpncsp)
{
// disable horizontal scroll bar
ModifyStyle(WS_HSCROLL, 0);
CRect rect;
GetClientRect(&rect);
SetColumnWidth(0, rect.Width());
CListCtrl::OnNcCalcSize(bCalcValidRects, lpncsp);
}
之所以可行,是因为客户端矩形不包含垂直滚动条。
用户仍然可以自己调整列的大小,但是在禁用 HSCROLL 的情况下,他们似乎无法使其比控件更宽。
我有一个带有 CListCtrl 的简单对话框。列表控件在报表视图中,只有一列。
我通过覆盖 OnNcCalcSize() 函数禁用了列表的水平滚动
void CMyListCtrl::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS * lpncsp)
{
// disable horizontal scroll bar
ModifyStyle(WS_HSCROLL, 0);
CListCtrl::OnNcCalcSize(bCalcValidRects, lpncsp);
}
我正在通过处理 NM_CLICK 消息来捕获选择更改,但是由于某种原因,在单击列表中最后一个可见项时不会调用它。垂直滚动条的底部箭头最初也是不可见的,当我点击它时它也没有滚动。基本上红色方块里的都没有收到点击消息
我很确定这是因为我禁用了水平滚动条,因为它几乎就是水平滚动条 应该 .[=14= 的区域]
还有其他人看过吗?有什么方法可以捕获此区域中的点击消息?
我找到了一种解决方法,方法是在 OnNcCalcSize() 中将列的大小调整为列表控件的工作区宽度
void CMyListCtrl::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS * lpncsp)
{
// disable horizontal scroll bar
ModifyStyle(WS_HSCROLL, 0);
CRect rect;
GetClientRect(&rect);
SetColumnWidth(0, rect.Width());
CListCtrl::OnNcCalcSize(bCalcValidRects, lpncsp);
}
之所以可行,是因为客户端矩形不包含垂直滚动条。
用户仍然可以自己调整列的大小,但是在禁用 HSCROLL 的情况下,他们似乎无法使其比控件更宽。