| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
大量收QQ微信精准粉/交友粉,非诚勿扰千里之行 始于足下
共有 168 人关注过本帖
标题:MFC Listbox Control控件垂直滚动条的自动置底问题
只看楼主 加入收藏
鸿蒙之灵
Rank: 4
来 自:异次元裂缝
等 级:贵宾
威 望:10
帖 子:77
专家分:240
注 册:2016-8-22
结帖率:100%
  已结贴   问题点数:50  回复次数:3   
MFC Listbox Control控件垂直滚动条的自动置底问题
首先上一张图片,第一张图片为现在的样子,滚动条默认为顶部,信息增多后,最新信息需手动滚动才能显示,第二张是我想实现的,当该信息记录增多后,滚动条自动滚动,保持最后一条信息能够显示出来,第三张为Listbox Control控件的属性面板设置。
注:用户要求,新的提示消息需要在底部显示,所以不能用倒序显示来解决该问题;
网上搜过,但没看懂,感觉不好操作,望各位能指导详细点的解决办法,附带简单讲解,万分感谢!

/*问题已解决,图片已删除,因涉及商业性的东西,不便一直展示,故请谅解,上面文字有详细的问题描述*/

该控件我目前放置在一个Dialog中,对话框及控件的消息处理函数如下:

程序代码:

void CDlgAlarm::OnLbnSelchangeListAlarm()
{

    // TODO: 在此添加控件通知处理程序代码
}

HBRUSH CDlgAlarm::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO:  在此更改 DC 的任何属性
    if (pWnd->GetDlgCtrlID() == IDC_LIST_Alarm)
    {
        pDC-> SetBkColor(WHITE); //字体背景色
        pDC->SetBkMode(TRANSPARENT);//设置背景透明
        /*return ::CreateSolidBrush(RGB(255, 12,12));*/
        hbr = (HBRUSH)m_brush;        
    }

    // TODO:  如果默认的不是所需画笔,则返回另一个画笔
    return hbr;
}

BOOL CDlgAlarm::OnInitDialog()
{
    CDialog::OnInitDialog();   
    m_ListBoxContent.SetTextColor(BLACK);
    // TODO:  在此添加额外的初始化
    m_brush.CreateSolidBrush(WHITE);
    return TRUE;  // return TRUE unless you set the focus to a control
    // 异常: OCX 属性页应返回 FALSE
}


在对该控件增加信息的时候,我调用的函数如下:
程序代码:

void CColorListBox::AddItem(COLORREF cr,CString str)
{
   
    Item *it = new Item;
    it->cr = cr;
    strcpy( it->str , (LPSTR)(LPCTSTR)str );
    m_colorList.push_back( it );
    int index=AddString(CString(" "));
    SetItemData( index, (DWORD)it );
    SetItemHeight(index,m_height);
}



调用函数案例如下:

str.Format("%4d-%2d-%2d %02d:%02d:%02d   %s:自动闭塞双接故障恢复!",t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond(),xhd->m_strName);
alarmDlg->m_ListBoxContent.AddItem(WHITE,str);



[此贴子已经被作者于2018-9-14 15:33编辑过]

2018-09-14 14:58
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:266
帖 子:5837
专家分:33355
注 册:2011-1-18
  得分:50 
int CListBox::SetTopIndex( int nIndex );
Ensures that a particular list-box item is visible.

2018-09-14 15:12
鸿蒙之灵
Rank: 4
来 自:异次元裂缝
等 级:贵宾
威 望:10
帖 子:77
专家分:240
注 册:2016-8-22
  得分:0 
回复 2楼 rjsp
麻烦解释一下,这句代码应该怎么用,也就是说具体是在什么位置进行这个操作

对待编程,要像对待情人一样
2018-09-14 15:16
鸿蒙之灵
Rank: 4
来 自:异次元裂缝
等 级:贵宾
威 望:10
帖 子:77
专家分:240
注 册:2016-8-22
  得分:0 
嗯,用版主的方法 解决了,版主给出的函数,在每次对ListBox控件进行信息新增的时候进行调用即可,谢谢了

对待编程,要像对待情人一样
2018-09-14 15:26







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023125 second(s), 9 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved