前言
很多项目中,都需要类似于VS2010这样的滚动列表窗口来展示当前操作进度。
所以本文主要介绍该滚动窗口的实现方案。该方案有两种实现方案。
本文默认读者有MFC编程技术,如不懂的可评论留言,吾抽空会补充基础。
1.新建工程
新建名为listboxtest21的mfc工程;名字随便取。然后拖拉控件,实现方案有两种listbox和listctrl,如下图所示。所以两个控件都拖进Dialog里面。并且拖拽两个button。
最后界面如上图。
2.listbox实现
添加listbox变量m_listbox,右击控件添加变量即可。
双击button1添加实现函数,如下
void Clistboxtest21Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
m_listbox.AddString(_T("listbox不能用于工程的list会报错"));
m_listbox.SetTopIndex(m_listbox.GetCount()-1);
/*
int count = 0;
count = m_listbox.GetCount ();
m_listbox.SetCurSel (count - 1);
*/
}`在这里插入代码片`
第二行功能为默认显示最后一行;
注释掉的代码也是默认显示最后一行;不同的是,注释掉的代码是默认选择最后一行。
3.listctrl实现
设置ListCtrl View为report。原因是因为Icon,Small Icon与List 都为多列的不适合,所以设置report模式。此外 No Column Header 设置为Ture,表明不显示列头。
在OnInitDialog里面,设置Listctrl单列,宽度可以随意设置。添加listctrl变量为m_listctrl.
BOOL Clistboxtest21Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
m_listctrl.InsertColumn(0,_T("111"),1,300);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
添加Button2的响应函数:nCount为获取当前的行数,插入需要显示的内容与“…”。下面每次添加需要显示的内容后,需要删掉前一行的“…”,EnsureVisible函数为默认显示最后一行。
void Clistboxtest21Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
//m_listctrl.Ins
int nCount = m_listctrl.GetItemCount();
m_listctrl.InsertItem(nCount,_T("aaaaaaaaaaaaaaaaaaaaaaaaaa"));
m_listctrl.InsertItem(nCount+1,_T("..."));
if (nCount > 0)
{
m_listctrl.DeleteItem(nCount-1);
m_listctrl.EnsureVisible(nCount-1, FALSE);
}
}
4.显示效果
可在公众号上联系作者和查找相关代码。