MFC List Control 控件

10 篇文章 0 订阅

原文链接::https://blog.csdn.net/sunjikui1255326447/article/details/88916090

1、打开工具箱(可以从视图中找),添加一个List Control控件,ID设置为IDC_PROGRAM_LANG_LIST,View属性设为Report,即为报表风格,Single Selection属性设为True。再添加一个静态文本控件和一个编辑框,静态文本控件的Caption属性设为“选择的语言:”,编辑框的ID设为IDC_LANG_SEL_EDIT,Read Only属性设为True。此时的对话框模板如下图:

2、为列表视图控件IDC_PROGRAM_LANG_LIST添加变量为m_List。

步骤:选中List_Control 控件面板,右键单击----》添加变量------》名称m_List。点击完成

3、添加初始化代码:

List_control初始化代码如下:

// TODO: 在此添加额外的初始化代码	
    CRect rect;
 
	// 获取编程语言列表视图控件的位置和大小   
	m_List.GetClientRect(&rect);
 
	// 为列表视图控件添加全行选中和栅格风格   
	m_List.SetExtendedStyle(m_List.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
 
	// 为列表视图控件添加三列   
	m_List.InsertColumn(0, _T("语言"), LVCFMT_CENTER, rect.Width() / 3, 0);
	m_List.InsertColumn(1, _T("2019.02排名"), LVCFMT_CENTER, rect.Width() / 3, 1);
	m_List.InsertColumn(2, _T("2018.02排名"), LVCFMT_CENTER, rect.Width() / 3, 2);
 
	// 在列表视图控件中插入列表项,并设置列表子项文本   
	m_List.InsertItem(0, _T("Java"));
	m_List.SetItemText(0, 1, _T("1"));
	m_List.SetItemText(0, 2, _T("1"));
	m_List.InsertItem(1, _T("C"));
	m_List.SetItemText(1, 1, _T("2"));
	m_List.SetItemText(1, 2, _T("2"));
	m_List.InsertItem(2, _T("C#"));
	m_List.SetItemText(2, 1, _T("3"));
	m_List.SetItemText(2, 2, _T("6"));
	m_List.InsertItem(3, _T("C++"));
	m_List.SetItemText(3, 1, _T("4"));
	m_List.SetItemText(3, 2, _T("3"));

4、编译运行---》结果如下:

5、接着将我们的选中的语言显示在下面的编译框中间。选中List_Control 控件面板,右键单击----》添加事件处理程序------》添家编辑。如下图。完成后,跳转到MFC_LISTDlg.cpp文件。

6、程序自动添加代码如下:

7、在这个函数的添加代码(该函数意思是当鼠标单击的消息处理)

左键单击选中事件

void CMFCLISTDlg::OnNMClickProgramLangList(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
 
	CString strLangName;    // 选择语言的名称字符串   
	NMLISTVIEW *pNMListView = (NMLISTVIEW*)pNMHDR;
 
	if (-1 != pNMListView->iItem)        // 如果iItem不是-1,就说明有列表项被选择   
	{
		// 获取被选择列表项第一个子项的文本   
		strLangName = m_List.GetItemText(pNMListView->iItem, 0);
		// 将选择的语言显示与编辑框中   
		SetDlgItemText(IDC_LANG_SEL_EDIT, strLangName);
	}
	*pResult = 0;
}
//可以实现多行选中,左键双击
void COffLineDlg::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
 
	POSITION ps;
	int nIndex;
 
	ps = m_listIP.GetFirstSelectedItemPosition();
	nIndex = m_listIP.GetNextSelectedItem(ps);
	//TODO:添加多选的操作。
	if (nIndex == -1)
	{
		//m_list.SetItemState(-1,LVNI_SELECTED,LVNI_SELECTED);
		MessageBox(_T("无效的客户端ID,请重新选择"));
		return;
 
	}
	m_listIP.SetItemState(nIndex, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
	CString str;
	str = m_listIP.GetItemText(nIndex, 0);
	MessageBox(str);
	str=str+m_list.GetItemText(nIndex,1); //所有的
 
	*pResult = 0;
}

8、运行程序后,如下图,单击每一行,会显示该行数据:

9、但是呢,选中后,右键单击如何显示菜单呢?往下-----》选中List_Control 控件面板,右键单击----》添加事件处理程序------》添家编辑。如下图。完成后,跳转到MFC_LISTDlg.cpp文件

10、添加按钮---》,步骤如下:

11、按钮设计如下:

12、编写右键单击事件函数:(菜单响应)

右键单击弹出菜单

void CMFCLISTDlg::OnNMRClickProgramLangList(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	if (pNMListView->iItem != -1)
	{
 
		CPoint pt;
		GetCursorPos(&pt);
		CMenu menu;
		menu.LoadMenu(IDR_MENU1);
		CMenu *popmenu;
		popmenu = menu.GetSubMenu(0);
		popmenu->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
	}
 
	*pResult = 0;
}

13、运行效果如下:

14、至于添加,删除等事件响应函数,请大家自行编写。

代码如下:

菜单下删除事件响应

// 删除代码
void CMFCLISTDlg::OnFile32772()
{
	// TODO: 在此添加命令处理程序代码
	int i, iState;
	int nItemSelected = m_List.GetSelectedCount();
	int nItemCount = m_List.GetItemCount();
	if (nItemSelected < 1)
		return;
	for (i = nItemCount - 1; i >= 0; i--)
	{
		iState = m_List.GetItemState(i, LVIS_SELECTED);
		if (iState != 0)
		{
 
			m_List.DeleteItem(i);
		}
	}
}

 

 

 

 

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MFC ListControl件的颜色可以通过以下方法进行设置: 1. 设置整个ListControl的背景颜色: 可以使用CListCtrl类的SetBkColor()函数来设置ListControl的背景颜色,例如: m_ListCtrl.SetBkColor(RGB(255, 255, 255)); // 设置背景颜色为白色 2. 设置ListControl中某一行或某一列的颜色: 可以使用CListCtrl类的SetItem()函数来设置ListControl中某一行或某一列的颜色,例如: m_ListCtrl.SetItem(, , LVIF_TEXT | LVIF_STATE, _T("第一行第一列"), , , , , LVIS_SELECTED, LVIS_SELECTED); // 设置第一行第一列的文本和选中状态 m_ListCtrl.SetItemText(, 1, _T("第一行第二列")); // 设置第一行第二列的文本 m_ListCtrl.SetItemState(, LVIS_SELECTED, LVIS_SELECTED); // 设置第一行选中状态 m_ListCtrl.SetItemData(, (DWORD_PTR)&m_Data); // 设置第一行的数据 可以在SetItem()函数中设置LVITEM结构体的iItem、iSubItem、pszText、state、stateMask等参数来设置行或列的颜色和状态。 3. 设置ListControl中某一单元格的颜色: 可以使用CListCtrl类的SetCell()函数来设置ListControl中某一单元格的颜色,例如: m_ListCtrl.SetCell(, , RGB(255, , ), RGB(255, 255, 255)); // 设置第一行第一列的前景色为红色,背景色为白色 可以在SetCell()函数中设置行、列、前景色和背景色等参数来设置单元格的颜色。 以上是MFC ListControl件颜色设置的一些方法,希望能对您有所帮助。 ### 回答2: MFC ListControl 件是非常常用的件之一,可以用于展示大量数据。在使用 ListControl 件的过程中,我们可能会遇到需要修改件颜色的需求。下面就来介绍一下 MFC ListControl 件的颜色设置方法。 MFC ListControl 件的颜色可以通过属性编辑器或代码进行设置。在属性编辑器中,我们可以找到相应的属性(如:Background Color、Text Color、Selected Text Color、Selected Background Color 等),并通过改变相应的属性值来修改件的颜色。同样地,在代码中,我们也可以通过修改相应的件属性值来实现对件颜色的修改。例如: // 获取 ListControl 件指针 CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_CONTROL); // 设置件的背景色 pListCtrl->SetBkColor(RGB(255, 0, 0)); // 设置件文本颜色 pListCtrl->SetTextColor(RGB(0, 255, 0)); // 设置选中行的背景色和文本颜色 pListCtrl->SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); pListCtrl->SetSelectionMark(0); pListCtrl->SetItemState(0, LVIS_SELECTED, LVIS_SELECTED); 以上代码中,通过调用 SetBkColor() 函数和 SetTextColor() 函数分别对件的背景色和文本颜色进行设置。同时,代码也演示了如何设置选中行的背景色和文本颜色。需要注意的是,当设置件的颜色时,如果件已经被创建,需要先调用件的 RedrawItems() 函数进行重绘操作,否则,新设置的颜色可能不会立即生效。 总之,MFC ListControl 件是非常强大的件之一,灵活的颜色设置能够更好地满足各种需求,开发者需要注意件的颜色设置时需要先重绘才会生效。 ### 回答3: MFC ListControl件是MFC中非常常用的件之一,它可以用于显示列表、图形视图等。在使用ListControl件时,有时候需要对列表中的某些行或列进行颜色的设置以达到更好的视觉效果。下面我们来了解一下MFC ListControl件的颜色设置。 MFC ListControl件的背景颜色是由ListControl的背景色和父窗口的背景色共同决定的。用户可以在资源编辑器中或运行时使用CListCtrl类的SetBackgroundColor()函数来设置ListControl的背景颜色。 MFC ListControl件的前景颜色是由用户在添加数据时指定的。在使用CListCtrl类的InsertItem()函数添加行的时候,可以指定该行的前景颜色和背景颜色;在使用CListCtrl类的SetItemText()函数设置列的时候,也可以指定该列的前景颜色和背景颜色。 如果需要动态地设置某一行或某一列的颜色,可以使用CListCtrl类的SetItem()函数。例如,设置第一行红色,第二行蓝色,可以用以下代码: ``` m_ListCtrl.SetItem(0, 0, LVIF_TEXT | LVIF_STATE, _T("第一行"), 0, LVIS_SELECTED, LVIS_SELECTED, 0); m_ListCtrl.SetItemText(0, 1, _T("第一列")); m_ListCtrl.SetItemData(0, 100); m_ListCtrl.SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); m_ListCtrl.SetItemText(1, 0, _T("第二行")); m_ListCtrl.SetItem(1, 0, LVIF_TEXT | LVIF_STATE, _T("第二行"), 0, LVIS_SELECTED, LVIS_SELECTED, 0); m_ListCtrl.SetItemText(1, 1, _T("第二列")); m_ListCtrl.SetItemData(1, 200); m_ListCtrl.SetItemState(1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); m_ListCtrl.SetItemText(2, 0, _T("第三行")); m_ListCtrl.SetItemText(2, 1, _T("第三列")); m_ListCtrl.SetItemText(0, 0, _T("第一行")); m_ListCtrl.SetItemText(0, 1, _T("第一列")); m_ListCtrl.SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); m_ListCtrl.SetTextColor(0, RGB(255, 0, 0)); // 设置第1行红色 m_ListCtrl.SetItem(1, 0, LVIF_TEXT | LVIF_STATE, _T("第二行"), 0, LVIS_SELECTED, LVIS_SELECTED, 0); m_ListCtrl.SetItemText(1, 1, _T("第二列")); m_ListCtrl.SetItemState(1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); m_ListCtrl.SetTextColor(1, RGB(0, 0, 255)); // 设置第2行蓝色 ``` 除了设置整行或整列的颜色,还可以为不同的单元格设置不同的颜色。可以在添加行时使用LVITEM结构体的iItem、iSubItem、mask、pszText等成员,分别指定行号、列号、要设置的属性和单元格中要显示的文本。在通过CListCtrl类的GetItem()函数获取某一行列时,也可以获得单元格的前景色和背景色等属性信息。 通过上述方法,可以实现对MFC ListControl件的颜色自定义设置。至于要如何设置出美观的颜色组合,需要根据实际情况和个人喜好来决定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值