ListView插入节点的流程

ListView控件的样式被设置成report时,ListView控件实际上是分为两个部分, 一部分是Column, 这个部分是用来显示ListView的每一列的标题.

另一部分是Item, 每一个Item就是一行记录,一行记录中可以分成对应每一个'Column'的列,故一个ListView有多少个Column,一行Item就有多少列.

一个ListVie控件如下表所示:

Column1 Column2 Column3
Item0_0 Item0_1 Item0_2
Item1_0 Item1_1 Item1_2

插入流程

先插入column,再插入item.

ListView控件使用一个结构体来表示一个Column, 因此,插入一个column相当于插入一个设置信息的结构体.

结构体的字段含义如下:

  1. typedef struct tagLVCOLUMNW
  2. {
  3. UINT mask; // 用于记录结构体中哪些字段被使用的,如果这个字段没有被赋上相应的值,即使其他字段被赋值了函数也不会使用
  4. int fmt; // 用于记录格式一个Column的格式
  5. int cx; // 用于记录Column的宽度
  6. LPWSTR pszText; // 用于记录Column的显示的文本
  7. int cchTextMax; // 用于记录Column的显示的文本的字符个数
  8. int iSubItem; // 用于记录Column的位置
  9. int iImage; // 用于记录Column使用到的图标在图标链表中的索引
  10. int iOrder;
  11. #if (NTDDI_VERSION >= NTDDI_VISTA)
  12. int cxMin;
  13. int cxDefault;
  14. int cxIdeal;
  15. #endif
  16. } LVCOLUMNW, *LPLVCOLUMNW;
在这个结构体中, maskfmt这两个字段用一些宏来控制,这些宏分别是:

mask字段所使用到的宏

  • LVCF_FMT : fmt字段被使用.
  • LVCF_WIDTH : cx 字段被使用.
  • LVCF_TEXT : pszText 字段被使用.
  • LVCF_SUBITEM : iSubItem 字段被使用
  • LVCF_IMAGE : iImage 字段被使用
  • LVCF_ORDER : iOrder 字段被使用
  • LVCF_MINWIDTH : cxMin 字段被使用
  • LVCF_DEFAULTWIDTHcxDefault 字段被使用
  • LVCF_IDEALWIDTHcxIdeal 字段被使用

实例代码


  1. // 获取ListView控件的窗口句柄
  2. HWND hListView = GetDlgItem(hWnd , 0x1000);
  3. // 插入Column
  4. LV_COLUMN stcColumn = { 0 };
  5. stcColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;// 设置要使用的字段: 宽度,格式,文本
  6. stcColumn.fmt = LVCFMT_CENTER; //文字居中对齐
  7. stcColumn.cx = 70; // 宽度
  8. stcColumn.pszText = L"姓名"; //设置要显示文本
  9. ListView_InsertColumn(hListView , 0 , &stcColumn);
  10. // 继续插入一个Column
  11. stcColumn.pszText = L"年龄";
  12. ListView_InsertColumn(hListView , 1 , &stcColumn);
  13. // 继续插入一个Column
  14. stcColumn.pszText = L"性别";
  15. ListView_InsertColumn(hListView , 2, &stcColumn);
  16. // 插入节点
  17. // 节点是按行插入的, 一行就是一个节点
  18. // 每个节点被分成对应的列,有多少个Column就有多少列
  19. //
  20. LV_ITEM stcItem = { 0 };
  21. stcItem.mask = LVIF_TEXT; // 设置要使用的字段: 文本
  22. stcItem.iItem = 0; // 设置插入到的行号
  23. ListView_InsertItem(hListView , &stcItem); // 插入一行
  24. ListView_SetItemText(hListView , /*要插入行的listview句柄*/
  25. 0 , /*行号*/
  26. 0 , /*列号*/
  27. L"王大锤"/*文本*/
  28. );// 设置一行中的第0列
  29. ListView_SetItemText(hListView ,
  30. 0 , /*行号*/
  31. 1 , /*列号*/
  32. L"18"); // 设置一行中的第1列
  33. ListView_SetItemText(hListView , 0 , 2 , L"男");// 设置一行中的第3列
  34. stcItem.iItem = 1; // 设置要插入到的行号
  35. ListView_InsertItem(hListView , &stcItem);
  36. ListView_SetItemText(hListView ,
  37. 1 , /*行号*/
  38. 0 , /*列号*/
  39. L"王小锤");
  40. ListView_SetItemText(hListView , 1 , 1 , L"28");
  41. ListView_SetItemText(hListView , 1 , 2 , L"男");

ListView添加节点的更多相关文章

  1. 仿喜马拉雅实现ListView添加头布局和脚布局

     ListView添加头布局和脚布局 之前学习喜马拉雅的时候做的一个小Demo,贴出来,供大家学习参考: 如果我们当前的页面有多个接口.多种布局的话,我们一般的选择无非就是1.多布局:2.各种复杂滑动 ...

  2. JQuery 添加节点

    Mark一段自己写的添加节点的代码 function reply2(){ $( "<div class=sec1-div5>"+"<div class= ...

  3. jquery 添加节点的几种方法介绍

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  4. js实现在末尾添加节点

    在末尾添加节点: 1.获取ul标签 2.创建li标签 document.createElement("标签名称")方法 3.创建文本 document.createTextNode ...

  5. JavaScript案例二:在末尾添加节点

    简单实现通过JavaScript来增加HTML节点 <!DOCTYPE html> <html> <head> <title>JavaScript在末尾 ...

  6. 向html中添加节点

    简单: ①,js中: (function () { var box=document.querySelector("#box"); var con1=document.create ...

  7. 警惕rapidxml的陷阱:添加节点时,请保证变量的生命周期

    http://www.cnblogs.com/chutianyao/p/3246592.html 项目中要使用xml打包.解析协议,HQ指定了使用rapidxml--号称是最快的xml解析器. 功能很 ...

  8. delphi 添加节点

      //在选中的节点中上添加1个节点 procedure TForm1.Button1Click(Sender: TObject); begin     with TreeView1 do     b ...

  9. ListView添加项目带序列

    ListView添加项目带序列     function AddSelItems(listview1:TListView;ListView2:TListView):Boolean;var  s: st ...

随机推荐

  1. 一道sql面试题(查询语句)

    一道sql面试题(查询语句)   id name age 1  a        11 2  b        11 3  c        12 4  d        13 5  e        ...

  2. NET 类库

    NET 类库研究必备参考 扣丁格鲁 .NET 类库的强大让我们很轻松的解决常见问题,作为一个好专研的程序员,为了更上一层楼,研究CLR的基础类库实现是快速稳定的捷径. 一般场景下,采用 Reflect ...

  3. 验证编辑方法(Edit method)和编辑视图(Edit view)

    ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view) 在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是 ...

  4. JS代码平面化

    重构JS代码 - 让JS代码平面化   js中的嵌套函数用的很多,很牛叉,那为何要平面化? 易懂(自己及他人) 易修改(自己及他人) 平时Ajax调用写法(基于jQuery) $.post('url' ...

  5. Redis .NET开源组件Beetle.Redis

    Redis .NET开源组件Beetle.Redis Beetle.Redis是一款开源的Redis Client for .net组件,它提供非常简便的操作方式可以让开发人员轻松地访问Redis,同 ...

  6. 任务分配book

    上次写某道findpath的时候,没有写个二分答案没有过,之后就发现自己貌似一开始学分治那一块的时候就没有把二分学好....就打算重新回顾一下 这道题还算水,就是太久没有写模拟wa了3次....对自己 ...

  7. Nginx+phpfastcgi下flush输出问题

    最近由于业务需要,需要使用php的flush输出缓存刷新,处理浏览器超时问题. 最初的测试代码如下: ob_start();//打开缓冲区 for ($i=10; $i>0; $i--) { e ...

  8. 图解Javascript引用类型之数组

    以图说事明理,恰当时候会事半功陪.今天我就尝试着用图的方式讲讲“JavaScript引用类型之数组”.望更多童鞋给我反馈! 好东西分享给大家,但要尊重事实!!!因此特别说明:本图非我本人亲自所作,乃我 ...

  9. mac os 上安装mysqldb血泪史

    昨天下午在mac上安装mysql-python一直未遂今天查了很多资料终于成功了 最后还是在stackoverflow点击打开链接(好网站啊,一般有什么技术问题在这都能找到)上找到了答案,废话少数: ...

  10. 前端css:“圣杯布局”

    昨天面试前端,一面危险通过,面试官建议我看看“圣杯布局”,听起来很玄妙的名字,花了一晚上弄明白怎么回事,惊讶于前端工作的细节和技巧! 我先看几个基础,在后面要用到的: 1.CSS right/left ...