如何确定是否为一个CListCtrl一个滚动条显示?(How to determine if a s

2019-10-30 11:52发布

我是从一个CListCtrl派生的类。 我希望所有的列的宽度以总价显示窗口的宽度,让我不明白的底部滚动条。 我可以得到标准的滚动条奥钢联的宽度GetSystemMetrics(SM_CXVSCROLL)的电话,但我不知道如何判断垂直滚动条是活动的。 我试着使用:

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

但是pScrollbar始终是一个nullptr 。 我环顾四周,有些脂肪酶是说滚动条并不总是窗口,并可以通过手工绘制(啊!),可能不是一个窗口都没有。 这将让我的生活更加困难。 想法?

Answer 1:

从我的链接的问题( 如何从显示阻止一个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或垂直滚动条的宽度,使得这不再是一个问题。



文章来源: How to determine if a scrollbar for a CListCtrl is displaying?
标签: mfc clistctrl