如何确定是否正在显示CListCtrl的滚动条?

时间:2018-02-21 00:11:00

标签: mfc clistctrl

我有一个派生自CListCtrl的类。我希望所有列的宽度总计显示窗口的宽度,这样我就不会得到底部的滚动条。我可以通过GetSystemMetrics(SM_CXVSCROLL)调用获得标准滚动条的宽度,但我不知道如何判断垂直滚动条是否处于活动状态。我试图使用:

auto pScrollbar = GetScrollBarCtrl(SB_VERT);
auto is_visible = pScrollbar && pScrollbar->IsWindowVisible();

pScrollbar始终是nullptr。我环顾四周,有些人说滚动条并不总是窗户,可能是手工绘制的(呃!),可能根本就不是窗口。这将使我的生活更加困难。想法?

1 个答案:

答案 0 :(得分:0)

从我的关联问题(How to stop the bottom scrollbar from a CListCtrl from displaying?),我正在使用:

void CMyListCtrl::ResizeLastColumn()
{
    LVCOLUMN column;
    column.mask = LVCF_WIDTH;
    LONG maxWidth = 0;
    for (int i = 0; i < lastColumnIndex; ++i)
    {
        GetColumn(i, &column);
        maxWidth += column.cx;
    }
    CRect wndRect;
    GetWindowRect(&wndRect);

    SetColumnWidth(lastColumnIndex, wndRect.Width() - maxWidth - 4);
}

将列的大小调整为客户区的宽度。事实证明,使用GetClientRect()代替,我不必减去-4或垂直滚动​​条宽度,这不再是一个问题。