我在资源视图里将listbox的属性horizon 设为TRUE,可是还是不能显示水平滚动条,这是为什么啊,哪位大侠知道,告诉小弟一声。!!!!

解决方案 »

  1.   

    重新设置水平滚动条的长度CString str;
    CSize   sz;
    int     dx=0;
    CDC*    pDC = pmyListBox->GetDC();
    for (int i=0;i < pmyListBox->GetCount();i++)
    {
      pmyListBox->GetText( i, str );
      sz = pDC->GetTextExtent(str);   if (sz.cx > dx)
    dx = sz.cx;
    }
    // Set the horizontal extent only if the current extent is not large enough.
    if (pmyListBox->GetHorizontalExtent() < dx)
    {
      pmyListBox->SetHorizontalExtent(dx);
      ASSERT(pmyListBox->GetHorizontalExtent() == dx);
    }
    pmyListBox->ReleaseDC(pDC);
      

  2.   

    引用luhongyu2108回复:
    ListBox的属性中添加WS_HSCROLL,因为CListBox是从CWnd继承的,
    所以可以设置这个属性。
    然后使用SetHorizontalExtent设置水平滚动范围
    下面的代码根据列表框中内容设置范围
    // The pointer to my list box.
    extern CListBox* pmyListBox;// Find the longest string in the list box.
    CString str;
    CSize sz;
    int dx = 0;
    TEXTMETRIC tm;
    CDC* pDC = pmyListBox->GetDC();
    CFont* pFont = pmyListBox->GetFont();// Select the listbox font, save the old font
    CFont* pOldFont = pDC->SelectObject(pFont);
    // Get the text metrics for avg char width
    pDC->GetTextMetrics(&tm);  for (int i = 0; i < pmyListBox->GetCount(); i++)
    {
      pmyListBox->GetText(i, str);
      sz = pDC->GetTextExtent(str);  // Add the avg width to prevent clipping
      sz.cx += tm.tmAveCharWidth;  if (sz.cx > dx)
      dx = sz.cx;
    }
    // Select the old font back into the DC
    pDC->SelectObject(pOldFont);
    pmyListBox->ReleaseDC(pDC);// Set the horizontal extent so every character of all strings  
    // can be scrolled to.
    pmyListBox->SetHorizontalExtent(dx);
      

  3.   

    我在MFC设计中也遇到过你的问题,尝试了他的代码,直接在你调用listbox进行显示的功能函数里(一般是一个按键的函数里,点此按键可让你指定的listbox里显示)添加此代码。
    // The pointer to my list box.
    extern CListBox* pmyListBox;
    是定义你所使用的listbox的类指针,你可以在工程类的头文件里加上这句话,功能函数里就不用加这句话了,其他代码可以直接copy下来,别忘把你定义的listbox替换这里的pmyListBox!
    (比如我的代码中
    void CLUDlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX,IDC_LIST1,listbox1);}定义的是listbox1,所以将listbox1替换这里的pmyListBox,就OK啦!!!)