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



我有一个从clistctrl派生的类。我希望所有列的宽度能够总计显示窗口的宽度,以免我得到底部的滚动条。我可以在GetSystemMetrics(SM_CXVSCROLL)调用中获得标准滚动条的宽度,但我不知道如何判断垂直滚动条是否处于活动状态。我尝试使用:

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

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

来自我的链接问题(如何从clistctrl中停止底部滚动条显示?(,我正在使用:

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或垂直滚动条宽度,而不再是问题。

最新更新