我的listbox不是通过create生成的,而是通过直接添加构件生成的,它的属性里我勾了水平滚动,但没用,还是显示不出,
网上查了一下,好像要加代码,但我不知道加到哪里?怎么加?请高手赐教!望给出具体方法!谢过!

解决方案 »

  1.   


    void CSerialCommuncitionDlg::SetHScroll()
    {
    CDC* dc = GetDC();
    SIZE s;
    int index;
    CString str;
    long temp;
    for(index= 0; index< m_lstCommunicationInfo.GetCount(); index++)
    {
    m_lstCommunicationInfo.GetText(index,str);
    s = dc->GetTextExtent(str,str.GetLength()+1);   // 获取字符串的像素大小
    // 如果新的字符串宽度大于先前的水平滚动条宽度,则重新设置滚动条宽度
    // IDC_LISTBOX为m_List的资源ID
    temp = (long)SendDlgItemMessage(IDC_LIST_COMMUNICATIONINFO, LB_GETHORIZONTALEXTENT, 0, 0); //temp得到滚动条的宽度
    if (s.cx > temp)  
    {
    SendDlgItemMessage(IDC_LIST_COMMUNICATIONINFO, LB_SETHORIZONTALEXTENT, (WPARAM)s.cx, 0);
    }
    }
    ReleaseDC(dc);
    }
      

  2.   

    我的是IDC_LIST1,类是CSend,所以我把IDC_LIST_COMMUNICATIONINFO改成IDC_LIST1,void CSerialCommuncitionDlg::SetHScroll()
    改成void CSend::SetHScroll(),编译是通过了,但效果没有,没有出现传说中的滚动条。
    顺便说一下,我的listbox是用来存放添加附件的地址的,当我附件的路径字符串长超过listbox一行的长度时,一部分字符就读不进来了,所以
    我要加滚动条。
      

  3.   

    我的是IDC_LIST1,类是CSend,所以我把IDC_LIST_COMMUNICATIONINFO改成IDC_LIST1,void CSerialCommuncitionDlg::SetHScroll()
    改成void CSend::SetHScroll(),编译是通过了,但效果没有,没有出现传说中的滚动条。
    顺便说一下,我的listbox是用来存放添加附件的地址的,当我附件的路径字符串长超过listbox一行的长度时,一部分字符就读不进来了,所以
    我要加滚动条。
      

  4.   

    你每次向ListCtrl添加新的字符串的时候,都要调用这个函数一次。添加一次,然后调用一次。
      

  5.   

    本人也是遇到同样问题,经过很长时间搜索才找到1楼所发的方法,并修改通过了,在此谢谢1楼,为免大家再次受此问题的困扰,发表出来,大家共同学习。
    4楼所说的:你每次向ListCtrl添加新的字符串的时候,都要调用这个函数一次。添加一次,然后调用一次。这个也是要的
    下面代码中出现的:IDC_LIST1为控件中ListBox的ID,
    CMultiThreadandsectionDlg为我自己定义的对话框类,这两个自己更换成你自己定义的对话框类
    void CMultiThreadandsectionDlg::SetHScroll()
    {
    HWND hwndDataBox = ::GetDlgItem(g_hwnd,IDC_LIST1);

        CDC* dc = GetDC();
        SIZE s;
        int index;
        CString str;
        long temp;
        for(index= 0; index< ListBox_GetCount(hwndDataBox); index++)
        {
    ListBox_GetText(hwndDataBox,index,str);
            s = dc->GetTextExtent(str,strlen(str)/2+30);   // 获取字符串的像素大小,这个你可以自己取长度,不过一定要用strlen()这个函数
            // 如果新的字符串宽度大于先前的水平滚动条宽度,则重新设置滚动条宽度
            // IDC_LISTBOX为m_List的资源ID
            temp = (long)SendDlgItemMessage(IDC_LIST1, LB_GETHORIZONTALEXTENT, 0, 0); //temp得到滚动条的宽度
            if (s.cx > temp)  
            {
                SendDlgItemMessage(IDC_LIST1, LB_SETHORIZONTALEXTENT, (WPARAM)s.cx, 0);
            }
        }
        ReleaseDC(dc);
    }