通用控件ListBox 消息控制
MFC/面向对话框 :
回归本质 – “消息控制” – 好好学习了一下怎样通过消息控制通用控件ListBox
一.listbox添加列
用到结构体:LVCOLUMN column
一般在头文件<tlhelp32.h>有定义
typedef struct _LVCOLUMN {
UINT mask; //说明此结构中哪些成员是有效的
int fmt; //列的对齐方式
int cx; //列的初始宽度
LPTSTR pszText; //列的标题
int cchTextMax; //pszText所指向的缓冲区的大小
int iSubItem; //与列关联的子项的索引值,从0开始
int iImage; //与列关联的图像列表中指定图像的索引值
int iOrder; //第几列,0代表最左一列
} LVCOLUMN, FAR *LPLVCOLUMN;
使用方法是:
LVCOLUMN column;
column.mask = LVCF_TEXT | LVCF_FMT | LVCF_WIDTH; //设置有效域的属性
column.fmt = LVCFMT_CENTER; //此栏的显示方式 --居中/靠左/靠右
column.cx = 100; //这栏的宽度
column.pszText = L"第一列"; //此栏(此列)的显示文本 比如:课程表 "星期一"
//添加一栏 --用于显示程序名称
::SendMessage(hWndList, LVM_INSERTCOLUMN, 0, (LPARAM)&column); //发消息通知listbox添加
//添加一栏 --用于显示进程ID(PID)
column.pszText = L"第二列"; //此栏(此列)的显示文本 比如:课程表 "星期二"
column.cx = 50;
::SendMessage(hWndList, LVM_INSERTCOLUMN, 0, (LPARAM)&column); //发消息通知listbox添加
一.listbox添加项
一般在头文件<tlhelp32.h>有定义
typedef struct _LVITEM {
UINT mask; //说明LVITEM结构中哪些成员有效
int iItem; //项目的索引值(可以视为行号)从0开始
int iSubItem; //子项的索引值(可以视为列号)从0开始
UINT state; //子项的状态
UINT stateMask; //状态有效的屏蔽位
LPTSTR pszText; //主项或子项的名称
int cchTextMax; //pszText所指向的缓冲区大小
int iImage; //关联图像列表中指定图像的索引值
LPARAM lParam; //程序定义的32位参数
int iIndent; //表示图像位置缩进的单位
} LVITEM, FAR *LPLVITEM;
使用方法:
int nItem = 0; //需要连续添加所以设的一个index
CSTring cs = L"第一个内容" //
LVITEM item = { 0 };
item.iItem = nItem;
item.mask = LVIF_TEXT;
item.pszText = cs.GetBuffer(); //设置第一行名称 第一个内容 比如:课程表的"第一节课"
//注意LVM_INSERTITEM 是添加项(添加一行)
::SendMessage(hWndList, LVM_INSERTITEM, 0, (long)&item);
LVITEM lvi;
lvi.iSubItem = 1; //这里是指定地第一行的第一个
lvi.pszText = (LPTSTR)L"第二个内容"; //这将是第一行的第二个内容 比如:课程表的"语文"
//注意LVM_SETITEMTEXT是添加(第nitem行)内容
::SendMessage(hWndList, LVM_SETITEMTEXT, nItem,(LPARAM)&lvi);
注意看注释应该能很清楚了,走了一些坑,希望以后不会在犯糊涂了!!