评论

收藏

[jQuery] MFC列表控件List Control控件的使用方法

开发技术 开发技术 发布于:2021-07-09 09:10 | 阅读数:601 | 评论:0

  拖一个List Control到对话框, 添加变量m_list , 设置表格属性View为 Report 。
DSC0000.png

        初始化表格
  设置列框,文本背景颜色,列名,列的布局样式等。
CRect rectL;
m_List.GetWindowRect(&rectL);
int widL = rectL.right - rectL.left;
int nColL = widL / 4;  //列宽
m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);  // 整行选择、网格线
m_List.SetTextBkColor(RGB(224, 238, 238));  //设置文本颜色
m_List.InsertColumn(0, _T("学号"), LVCFMT_LEFT, nColL);
m_List.InsertColumn(1, _T("姓名"), LVCFMT_LEFT, nColL);
m_List.InsertColumn(2, _T("专业"), LVCFMT_LEFT, nColL);
m_List.InsertColumn(3, _T("成绩"), LVCFMT_LEFT, nColL);
       给表格插入数据
  (1)先插入行,InsertItem(), 注意,第一个参数是行号,第二个可以为空字符串,或者设为第0列的名称。
CString id[] = { "2019001","2019002","2019003","2019004","2019005","2019006" };
CString name[] = { "鲁班", "后裔", "猴子", "亚瑟", "安其拉", "甄姬" };
CString zhuanye[] = { "射手", "射手", "刺客", "战士", "法师", "法师" };
CString score[] = { "100", "98", "100","90", "92", "91" };
for (int i = 0; i < 6; i++)
{
  // 1. 先插入一行,i是行号,第二个参数是第0列的内容;可以不填为空
  //m_List.InsertItem(i, id[i]);
  m_List.InsertItem(i, "");
  // 2.设置该行每一列的内容
  m_List.SetItemText(i, 0, id[i]);
  m_List.SetItemText(i, 1, name[i]);
  m_List.SetItemText(i, 2, zhuanye[i]);
  m_List.SetItemText(i, 3, score[i]);
}
  效果如下:
DSC0001.png

  动态插入也可以,添加定时器消息,比如,先插入前3列,最后一列分数,动态插入。
  此时不需要先插入行,因为之前几列已经插入好了,最后一列不需要再用InsertItem().
void CListControlDemoDlg::OnTimer(UINT_PTR nIDEvent)
{
CString score[] = { "100", "98", "100","90", "92", "91" };
static int add = 1;
for (int i = 0; i < 6; i++)
{
CString str;
str.Format("-%d", add);
m_List.SetItemText(i, 3, score[i] + str);
}
add++;
CDialog::OnTimer(nIDEvent);
}
  List Control的作用很多,比如还可以在第0列添加checkbox,  做一个全选,反选的功能。
  MFC控件的比较难用,如果不是特殊需要,最好还是用Qt, MFC的API太难用了,Qt相对简单,而且做得界面也漂亮,qss语法很好修改样式,做出各种效果。
  List Control有一个很坑的地方,如果你把 Owner Draw Fixed属性设为True, 又忘记写重载类,那么会有DrawItem()的bug.
DSC0002.png


  
关注下面的标签,发现更多相似文章