
MFC列表控件如何做成这种风格?就是需要每一项前面都要有一个打钩的,然后最关键的是我想要复选了这么多项
这里用一个list控件,然后选择list或report风格,添加CListCtrl类型的变量m_list,再添加7个BOOL类型的变量用来实现7个项的复选框。初始化时像下面这个例程即可(此例程采用了report风格,如图所示):
//设置用户列表框
m_sColumnLable[0] = "曲线";
m_sColumnLable[1] = "颜色";
m_sItemString[0][0] = "转速";
m_sItemString[0][1] = "红色";
m_sItemString[1][0] = "温度";
m_sItemString[1][1] = "青色";
m_sItemString[2][0] = "压强";
m_sItemString[2][1] = "绿色";
m_sItemString[3][0] = "力矩";
m_sItemString[3][1] = "蓝色";
m_sItemString[4][0] = "系数";
m_sItemString[4][1] = "紫色";
//设置列表框各列
LV_COLUMN lvColumn;
lvColumn.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
for (int i=0;i<2;i++)
{
//设置新增列数据结构
lvColumn.iSubItem = i;
lvColumn.pszText = m_sColumnLable[i].GetBuffer(99);
lvColumn.cx = 125;
lvColumn.fmt = LVCFMT_LEFT;
//插入新增列
m_list.InsertColumn(i, &lvColumn);
}
//设置列表框各项
LV_ITEM lvItem;
for (i=0;i<5;i++)
{
//设置新增项数据结构
lvItem.mask = LVIF_TEXT | LVIF_STATE;
lvItem.iItem = i;
lvItem.iSubItem = 0;
lvItem.state = INDEXTOSTATEIMAGEMASK(1);
lvItem.pszText = m_sItemString[i][0].GetBuffer(99);
//插入新增项
m_list.InsertItem(&lvItem);
}
//设置每项的显示文本
for (i=0;i<5;i++)
for (int j=1;j<2;j++)
m_list.SetItemText(i, j, m_sItemString[i][j]);
ListView_SetExtendedListViewStyle(m_list, LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
for (i=0;i<5;i++)
ListView_SetCheckState(m_list, i, TRUE);
之后要想获取选中项的信息,可以在OnOK函数中写入:
m_bCheckRPM = ListView_GetCheckState(m_list, 0);
如果m_bCheckRPM值为true表示选中了,调取相应的m_sItemString值即可写入数据库,其他项完全一样