欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Win32 List Control 控件

程序员文章站 2024-03-01 13:07:58
...

#前言

List ControlWin32中最难用的也是最复杂的空间之一.

我们看下本博客的布局样式
Win32 List Control 控件
请注意List Controlview设置为ViewPort,其他视图属性可以自行测试。ViewPort是一个二维的表格视图类型

Win32 List Control 控件

我们首先插入如下数据:
Win32 List Control 控件
三个标题栏,和三行数据。

标题栏插入:

		/*插入标题行*/
		LVCOLUMN lv;
		lv.mask = LVCF_FMT| LVCF_WIDTH|LVCF_TEXT;
		lv.fmt = LVCFMT_CENTER;
		lv.cx = 100;
		lv.pszText = (LPTSTR)_T("名称");
		LRESULT p = SendDlgItemMessage(hwind, IDC_LV, LVM_INSERTCOLUMN, 0, (LPARAM)&lv);
		lv.pszText = (LPTSTR)_T("性别");
		SendDlgItemMessage(hwind, IDC_LV,LVM_INSERTCOLUMN,1, (LPARAM)&lv);
		lv.pszText = (LPTSTR)_T("住宅");
		SendDlgItemMessage(hwind, IDC_LV, LVM_INSERTCOLUMN, 2, (LPARAM)&lv);

第一列名称的插入:

		LV_ITEM item;
		item.mask = LVIF_TEXT;
		item.iItem = 0;
		item.iSubItem = 0;
		item.pszText = (LPTSTR)_T("王五");

		SendDlgItemMessage(hwind, IDC_LV, LVM_INSERTITEM, 0, (LPARAM)&item);

		item.iItem = 1;
		item.iSubItem = 0;
		item.pszText = (LPTSTR)_T("李四");
		SendDlgItemMessage(hwind, IDC_LV, LVM_INSERTITEM, 0, (LPARAM)&item);

		item.iItem = 2;
		item.iSubItem = 0;
		item.pszText = (LPTSTR)_T("赵敏");
		SendDlgItemMessage(hwind, IDC_LV, LVM_INSERTITEM, 0, (LPARAM)&item);

插入其他列(注意其他列的插入不能用插入第一列的消息)


		//插入第一列之外的数据

		HWND hwndListView = GetDlgItem(hwind, IDC_LV);
		LV_ITEM   lvItem;
		lvItem.mask = LVIF_TEXT;
		//插入第一行数据,这一段代码是不可以少的。
		lvItem.iItem = 0;//行号,从0开始
		lvItem.iSubItem = 0;//列号,
	
		//第一行 	
		lvItem.iItem = 0;
		//第二列
		lvItem.iSubItem = 1;
		lvItem.pszText = (LPTSTR)_T("女");
		ListView_SetItem(hwndListView, &lvItem);

		//第一行 	
		lvItem.iItem = 0;
		//第三列
		lvItem.iSubItem =2;
		lvItem.pszText = (LPTSTR)_T("广州");
		SendDlgItemMessage(hwind, IDC_LV, LVM_SETITEM, 0, (LPARAM)&lvItem);

		//第二行
		lvItem.iItem = 1;
		//第二列
		lvItem.iSubItem = 1;
		lvItem.pszText = (LPTSTR)_T("男");
		SendDlgItemMessage(hwind, IDC_LV, LVM_SETITEM, 0, (LPARAM)&lvItem);


我们在实现以下上图的表格线和选中某一行的时候高亮

		//获取旧的样式
		DWORD oldStyle = SendDlgItemMessage(hwind, IDC_LV, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
		//拼接新的样式
		oldStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
		
		SendDlgItemMessage(hwind, IDC_LV, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, oldStyle);

实现打印选中行和删除选中行等

			//获得选中行
			DWORD result = SendDlgItemMessage(hwind, IDC_LV, LVM_GETSELECTIONMARK, 0, 0);


			TCHAR d[10] = { 0 };
						
			_stprintf_s(d,_T("选中%d"),result);

			LVITEM lvi;
			lvi.mask = LVIF_TEXT;
			lvi.iItem = result;
			lvi.iSubItem = 0;
			lvi.pszText = d;
			lvi.cchTextMax = sizeof(d);
			//获取选中行第0列的文字 这应该输出王五
			SendDlgItemMessage(hwind, IDC_LV, LVM_GETITEMTEXT, result, (LPARAM)&lvi);
			//删除选中行
			SendDlgItemMessage(hwind, IDC_LV, LVM_DELETEITEM, result, 0);
			
相关标签: WIN32