VS2010 MFC滚动列表制作ListBox ListCtrl

前言

很多项目中,都需要类似于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.显示效果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

可在公众号上联系作者和查找相关代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
要在VC ListControl控件中添加check box,你可以使用自定义绘制来实现。下面是一个简单的示例代码: 1. 首先,在资源编辑器中创建一个List Control控件。 2. 在对话框类的头文件中添加以下成员变量和消息映射: ```cpp // 头文件 class CMyDialog : public CDialogEx { // ... CListCtrl m_list; CImageList m_imageList; // ... afx_msg void OnLvnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult); DECLARE_MESSAGE_MAP() }; ``` 3. 在OnInitDialog()函数中添加以下代码: ```cpp // 初始化 List Control m_list.SubclassDlgItem(IDC_LIST, this); m_list.SetExtendedStyle(LVS_EX_CHECKBOXES); // 创建图像列表以容纳 checkbox 图标 m_imageList.Create(16, 16, ILC_MASK | ILC_COLOR, 1, 1); HICON hIcon = (HICON)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_CHECKBOX), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); m_imageList.Add(hIcon); m_list.SetImageList(&m_imageList, LVSIL_SMALL); ``` 4. 在消息映射中添加以下代码: ```cpp // 消息映射 BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx) // ... ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST, &CMyDialog::OnLvnItemchangedList) END_MESSAGE_MAP() ``` 5. 实现OnLvnItemchangedList()函数: ```cpp void CMyDialog::OnLvnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = reinterpret_cast<NM_LISTVIEW*>(pNMHDR); // 确定是否选中了某个项目 if ((pNMListView->uChanged & LVIF_STATE) && (pNMListView->uNewState & LVIS_STATEIMAGEMASK)) { // 获取选中项目的索引 int nIndex = pNMListView->iItem; // 获取当前 checkbox 的状态 BOOL bChecked = m_list.GetCheck(nIndex); // 根据需要处理 checkbox 状态 if (bChecked) { // 处理选中状态 } else { // 处理未选中状态 } } *pResult = 0; } ``` 这样,你就可以在VC ListControl控件中添加check box,并通过OnLvnItemchangedList()函数处理选中状态的变化。记得将IDC_LIST替换为你实际使用的List Control控件的ID。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CoomCon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值