列表框不会出现水平滚动?

时间:2014-09-17 13:10:40

标签: mfc

我有一个列表框,我设置了两个属性,即垂直和水平滚动到true。我可以获得垂直滚动条,但在添加冗长的字符串时无法获得水平滚动条。

任何人都可以让我知道如何获得列表框的水平滚动条。

3 个答案:

答案 0 :(得分:3)

在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;
}

答案 1 :(得分:2)

您必须指定水平滚动范围(以像素为单位的最大宽度)。通过调用CListBox :: SetHorizo​​ntalExtent来实现。

答案 2 :(得分:0)

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

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