禁用HSCROLL的CListCtrl-无法选择最后一个可见项目

时间:2018-07-23 10:26:51

标签: c++ scrollbar clistctrl

我有一个带有CListCtrl的简单对话框。列表控件处于报表视图中,并且只有一列。

我通过重写OnNcCalcSize()函数禁用了列表的水平滚动。

void CMyListCtrl::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS * lpncsp)
{
    // disable horizontal scroll bar
    ModifyStyle(WS_HSCROLL, 0);

    CListCtrl::OnNcCalcSize(bCalcValidRects, lpncsp);
}

我正在通过处理NM_CLICK消息来捕获选择更改,但是由于某些原因,单击列表中的最后一个可见项时不会调用此选项。垂直滚动条的底部箭头最初也不可见,当我单击它时也不会滚动。基本上,红色方块中的所有内容都未收到点击消息。

no Scroll Scroll

我非常确定这是因为我禁用了水平滚动条,因为它几乎是水平滚动条应位于的区域

还有其他人看到吗?我可以在该区域捕获点击消息吗?

1 个答案:

答案 0 :(得分:0)

我通过在OnNcCalcSize()中将列的大小调整为列表控件的工作区的宽度找到了解决方法

<ul>
  <li class="course Berlin Munich"></li>
  <li class="course Munich"></li>
</ul>

这有效,因为客户端rect不包括垂直滚动条。

用户仍然可以自己调整列的大小,但是在禁用HSCROLL的情况下,似乎他们无法使其宽度超出控件。