列表控件的使用

  • 列表控件是通用控件,响应WM_NOTIFY 消息

    • 主要包含了 4 种风格,我们学的是 report 风格

  • 如何设置列表的扩展风格

    • LVS_EX_GRIDLINES: 列表拥有表格线

    • LVS_EX_FULLROWSELECT:可以进行整行选中

    // 1. 设置列表的风格
    ListView_SetExtendedListViewStyle(hListView, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
  • 如何添加一个列:想要添加行必须拥有列( LVCOLUMN )

    • 使用 ListView_InsertColumn 宏进行设置

    // 向列表中的添加列
    VOID InsertListViewColumns(HWND hListView)
    {
    // 1. 初始化一个列结构体进行设置
    // 1.1 第一个字段 mask 表示想要应用哪些设置(对齐方式,文字,宽度)
    LVCOLUMN lvColumn = { LVCF_FMT | LVCF_TEXT | LVCF_WIDTH };
    // 1.2 设置对齐方式,第一列的对其方式始终是左对齐
    lvColumn.fmt = LVCFMT_CENTER;
    // 1.3 设置每一列的宽度
    lvColumn.cx = 100;

    // 2. 设置列名并添加列
    lvColumn.cx = 100;
    lvColumn.pszText = (LPWSTR)L"姓名";
    ListView_InsertColumn(hListView, 0, &lvColumn);

    lvColumn.cx = 50;
    lvColumn.pszText = (LPWSTR)L"年龄";
    ListView_InsertColumn(hListView, 1, &lvColumn);

    lvColumn.cx = 260;
    lvColumn.pszText = (LPWSTR)L"学校";
    ListView_InsertColumn(hListView, 2, &lvColumn);
    }
  • 如何添加一个行:插入一行数据+设置行的信息

    • ListView_InsertItem + ListView_SetItemText

    // 添加数据到某一行
    VOID InsertListViewItem(HWND hListView, int index, LPCWSTR Name, LPCWSTR Age, LPCWSTR School)
    {
    // 1. 先添加一行数据,并且设置第一列的信息
    LVITEM lvItem = { LVIF_TEXT };
    lvItem.iItem = index;
    lvItem.pszText = (LPWSTR)Name;
    ListView_InsertItem(hListView, &lvItem);

    // 2. 设置每一行中的元素信息
    ListView_SetItemText(hListView, index, 1, (LPWSTR)Age);
    ListView_SetItemText(hListView, index, 2, (LPWSTR)School);
    }
  • 如何获取列表的选中项

    • 需要注意通知码的筛选, NM_XXXX

    • 当响应的是列表控件产生的通知消息时, LParam 保存的是一个指针,指向 NMLISTVIEW

    // 2. 筛选消息是由谁产生的
    if (lpNmhdr->idFrom == IDC_LIST1)
    {
       // 3. 如果产生的是列表的通知消息,lParam 指向的是另外一个结构
       LPNMLISTVIEW lpNmListVew = (LPNMLISTVIEW)lParam;

       // 4. 如果产生的是鼠标的点击消息
       if (lpNmhdr->code == NM_CLICK)
      {
           // 判断点击的行是否有效
           // int n = ListView_GetItemCount(lpNmhdr->hwndFrom);
           if (-1 != lpNmListVew->iItem)
          {
               // 4.1 可以通过 LPNMLISTVIEW 获取点击的位置
               LVITEM lvItem = { LVIF_TEXT };
               // 4.2 必须要将 pszText 指向一个有效的位置
               lvItem.pszText = new WCHAR[0x10];
               // 4.3 设置缓冲区的大小
               lvItem.cchTextMax = 0x10;

               // 4.4 设置要获取的行列信息学
               lvItem.iItem = lpNmListVew->iItem;
               lvItem.iSubItem = lpNmListVew->iSubItem;

               // 4.5 发送消息获取数据
               ListView_GetItem(lpNmhdr->hwndFrom, &lvItem);

               // 4.6 显示获取的数据
               MessageBox(hWnd, lvItem.pszText, L"左键点击", MB_OK);
          }
      }
    }
  • 在列表中弹出一个菜单项

    case WM_NOTIFY:
    {
       // 1. 响应 WM_NOTIFY 消息的时候, lParam 指向的但通常十一个结构体
       LPNMHDR lpNmhdr = (LPNMHDR)lParam;

       // 2. 筛选消息是由谁产生的
       if (lpNmhdr->idFrom == IDC_LIST1)
      {
           // 右键弹出菜单
           if (NM_RCLICK == lpNmhdr->code)
          {
               // 1. 获取点击的位置,获取的是相对于桌面的
               POINT Point = { 0 };
               GetCursorPos(&Point);

               // 2. 获取一个子菜单
               HMENU hMenu = LoadMenu(GetModuleHandle(NULL), MAKEINTRESOURCE(IDR_MENU1));
               HMENU hSubMenu = GetSubMenu(hMenu, 0);

               // 3. 弹出菜单
               TrackPopupMenu(hSubMenu, TPM_LEFTALIGN, Point.x, Point.y, NULL, hWnd, nullptr);
          }
      }

       break;
    }

SDK_列表控件的使用的更多相关文章

  1. UWP开发必备:常用数据列表控件汇总比较

    今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...

  2. .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)

    说说WebForm: 数据列表控件: WebForm 下的列表绑定控件基本就是GridView.DataList.Repeater:当然还有其它DropDownList.ListBox等. 它们的共同 ...

  3. WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: Dat ...

  4. Flex 列表控件中的操作

    主要操作包括:显示提示,使用图标,编辑列表条目中数据. 1.使用数据提示: 当鼠标停留在条目上时,可以显示该条目的相关数据提示. 当利用滚动条时,可以显示滚动条的相关提示. 在列表控件中使用showD ...

  5. VC++ 列表控件的使用方法

    列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值.MFC中使用CListCtrl类来封装列表控件的各种操作. 通过调用BOOL Create( DWORD ...

  6. 【WPF开发备忘】使用MVVM模式开发中列表控件内的按钮事件无法触发解决方法

    实际使用MVVM进行WPF开发的时候,可能会用到列表控件中每行一个编辑或删除按钮,这时直接去绑定,发现无法响应: <DataGridTemplateColumn Header="操作& ...

  7. Android自定义标签列表控件LabelsView解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. 无论是在移动端的App,还是在前端的网页,我们经常会看到下面这种标签的列表效果:   标签从左到右摆放,一行显示不下时自动换行.这样的效果用And ...

  8. MFC列表控件更改一行的字体颜色

    参考自(http://blog.csdn.net/ribut9225/article/details/6720639) 1.首先从CListCtrl 继承一个类,命名为CListCtrlCl 在头文件 ...

  9. WPF: 实现带全选复选框的列表控件

    本文将说明如何创建一个带全选复选框的列表控件.其效果如下图:     这个控件是由一个复选框(CheckBox)与一个 ListView 组合而成.它的操作逻辑: 当选中“全选”时,列表中所有的项目都 ...

随机推荐

  1. Linux下,PHP的SESSION不起作用的问题

    改动SESSION目录的权限就能够了. 先找到SESSION目录, 然后 chmod -R 777 /var/lib/php/session 假设没有此目录,则新建此目录 mkdir -R 777 / ...

  2. 【bzoj1507】[NOI2003]Editor

    第二次写rope了 rope大法好!!! #include<algorithm> #include<iostream> #include<ext/rope> #in ...

  3. springMVC之异常处理

    1. 自己定义一个异常类: UserException.java public class UserException extends RuntimeException { private stati ...

  4. MPMoviePlayerController属性方法简介

    属性 说明 @property (nonatomic, copy) NSURL *contentURL 播放媒体URL,这个URL可以是本地路径,也可以是网络路径 @property (nonatom ...

  5. Android下拉刷新

    以下是我自己花功夫编写了一种非常简单的下拉刷新实现方案,现在拿出来和大家分享一下.相信在阅读完本篇文章之后,大家都可以在自己的项目中一分钟引入下拉刷新功能 最近项目中需要用到ListView下拉刷新的 ...

  6. bzoj1415 [Noi2005]聪聪和可可——概率期望

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1415 看博客:http://www.cnblogs.com/Narh/p/9206642.h ...

  7. JeePlus:代码生成器

    ylbtech-JeePlus:代码生成器 1.返回顶部 1. 代码生成器Jeeplus代码生成器可以快速提高你的开发效率代码生成器可以0编码快速开发,通过配置生成数据库,mapper,service ...

  8. 通过CSS控制页面中的内容垂直居中的方法

    方法一:通过行高(line-height)定位 line-height通常是用于调节一段文字的行与行之间的距离,或者说两行文字之间的距离,如果行高是500px,那么每一行中的文字距离本行的顶部就是25 ...

  9. css实现左边div固定宽度,右边div自适应撑满剩下的宽度

    (1)使用float <div class="use-float"> <div></div> <div></div> & ...

  10. E20171102-E

    segment   n. 环节; 部分,段落; [计算机] (字符等的) 分段; [动物学] 节片; distinct  adj. 明显的,清楚的; 卓越的,不寻常的; 有区别的; 确切的;