我有一个带有CListCtrl的简单对话框。列表控件处于报表视图中,并且只有一列。
我通过重写OnNcCalcSize()函数禁用了列表的水平滚动。
void CMyListCtrl::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS * lpncsp)
{
// disable horizontal scroll bar
ModifyStyle(WS_HSCROLL, 0);
CListCtrl::OnNcCalcSize(bCalcValidRects, lpncsp);
}
我正在通过处理NM_CLICK消息来捕获选择更改,但是由于某些原因,单击列表中的最后一个可见项时不会调用此选项。垂直滚动条的底部箭头最初也不可见,当我单击它时也不会滚动。基本上,红色方块中的所有内容都未收到点击消息。
我非常确定这是因为我禁用了水平滚动条,因为它几乎是水平滚动条应位于的区域。
还有其他人看到吗?我可以在该区域捕获点击消息吗?
答案 0 :(得分:0)
我通过在OnNcCalcSize()中将列的大小调整为列表控件的工作区的宽度找到了解决方法
<ul>
<li class="course Berlin Munich"></li>
<li class="course Munich"></li>
</ul>
这有效,因为客户端rect不包括垂直滚动条。
用户仍然可以自己调整列的大小,但是在禁用HSCROLL的情况下,似乎他们无法使其宽度超出控件。