列表框没有水平滚动?

问题描述 投票:0回答:3

我有一个列表框,我将两个属性(即垂直和水平滚动)设置为 true。我能够获得垂直滚动条,但在添加长字符串时无法获得水平滚动条。

任何人都可以告诉我如何获取列表框的水平滚动条。

mfc
3个回答
7
投票

在 OnInitDialog 中添加这段代码解决了我的问题。

BOOL OnInitDialog()
{
  CString str;
    CSize sz;
    int dx = 0;
    CDC* pDC = m_listbox.GetDC();
    for(int i=0; i < m_listbox.GetCount();i++)
    {
        m_listbox.GetText(i,str);
        sz = pDC->GetTextExtent(str);

        if(sz.cx > dx)
            dx = sz.cx;

    }
    m_listbox.ReleaseDC(pDC);

    if(m_listbox.GetHorizontalExtent() < dx )
    {
        m_listbox.SetHorizontalExtent(dx);
        ASSERT(m_listbox.GetHorizontalExtent() == dx);

    }

  return TRUE;
}

3
投票

您必须指定水平滚动范围(最大宽度以像素为单位)。请致电

CListBox::SetHorizontalExtent
来完成此操作。


0
投票

在 MFC 中,我有一个列表框太大,超出了包含它的窗口的右边框。一旦我使列表框 x 尺寸适合窗口,滚动条就再次开始正常工作。

由于某种原因,如果列表框太大,Windows 无法正确处理滚动条可见性,这是调整大小的副作用。

© www.soinside.com 2019 - 2024. All rights reserved.