Win32 List Control 控件

今天药忘吃喽~ 2022-12-23 00:39 335阅读 0赞

#前言

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

我们看下本博客的布局样式
在这里插入图片描述
请注意List Controlview设置为ViewPort,其他视图属性可以自行测试。ViewPort是一个二维的表格视图类型

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FmYW5taW5neWlx_size_16_color_FFFFFF_t_70_pic_center 1

我们首先插入如下数据:
在这里插入图片描述
三个标题栏,和三行数据。

标题栏插入:

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

第一列名称的插入:

  1. LV_ITEM item;
  2. item.mask = LVIF_TEXT;
  3. item.iItem = 0;
  4. item.iSubItem = 0;
  5. item.pszText = (LPTSTR)_T("王五");
  6. SendDlgItemMessage(hwind, IDC_LV, LVM_INSERTITEM, 0, (LPARAM)&item);
  7. item.iItem = 1;
  8. item.iSubItem = 0;
  9. item.pszText = (LPTSTR)_T("李四");
  10. SendDlgItemMessage(hwind, IDC_LV, LVM_INSERTITEM, 0, (LPARAM)&item);
  11. item.iItem = 2;
  12. item.iSubItem = 0;
  13. item.pszText = (LPTSTR)_T("赵敏");
  14. SendDlgItemMessage(hwind, IDC_LV, LVM_INSERTITEM, 0, (LPARAM)&item);

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

  1. //插入第一列之外的数据
  2. HWND hwndListView = GetDlgItem(hwind, IDC_LV);
  3. LV_ITEM lvItem;
  4. lvItem.mask = LVIF_TEXT;
  5. //插入第一行数据,这一段代码是不可以少的。
  6. lvItem.iItem = 0;//行号,从0开始
  7. lvItem.iSubItem = 0;//列号,
  8. //第一行
  9. lvItem.iItem = 0;
  10. //第二列
  11. lvItem.iSubItem = 1;
  12. lvItem.pszText = (LPTSTR)_T("女");
  13. ListView_SetItem(hwndListView, &lvItem);
  14. //第一行
  15. lvItem.iItem = 0;
  16. //第三列
  17. lvItem.iSubItem =2;
  18. lvItem.pszText = (LPTSTR)_T("广州");
  19. SendDlgItemMessage(hwind, IDC_LV, LVM_SETITEM, 0, (LPARAM)&lvItem);
  20. //第二行
  21. lvItem.iItem = 1;
  22. //第二列
  23. lvItem.iSubItem = 1;
  24. lvItem.pszText = (LPTSTR)_T("男");
  25. SendDlgItemMessage(hwind, IDC_LV, LVM_SETITEM, 0, (LPARAM)&lvItem);

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

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

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

  1. //获得选中行
  2. DWORD result = SendDlgItemMessage(hwind, IDC_LV, LVM_GETSELECTIONMARK, 0, 0);
  3. TCHAR d[10] = {
  4. 0 };
  5. _stprintf_s(d,_T("选中%d"),result);
  6. LVITEM lvi;
  7. lvi.mask = LVIF_TEXT;
  8. lvi.iItem = result;
  9. lvi.iSubItem = 0;
  10. lvi.pszText = d;
  11. lvi.cchTextMax = sizeof(d);
  12. //获取选中行第0列的文字 这应该输出王五
  13. SendDlgItemMessage(hwind, IDC_LV, LVM_GETITEMTEXT, result, (LPARAM)&lvi);
  14. //删除选中行
  15. SendDlgItemMessage(hwind, IDC_LV, LVM_DELETEITEM, result, 0);

发表评论

表情:
评论列表 (有 0 条评论,335人围观)

还没有评论,来说两句吧...

相关阅读

    相关 List Control

           学习MFC也有半年多的时间了,对于控件的使用,只是大概知道怎么用,但是记不住,为了日后的使用方便从今天开始将常用到的控件的使用方法记录下来,以方便日后的使用。