Win32 ListCtrl控件点击列标题排序
1.在WM_NOTIFY消息中捕获鼠标点点击列的索引
int MyMainDialog::OnNotify(NMHDR* pNMhdr)
{
if (pNMhdr->idFrom == IDC_LIST1)
{
QListCtrl listCtrl(pNMhdr->idFrom, this);
NMLISTVIEW* pNmListView = (NMLISTVIEW*)pNMhdr; switch (pNMhdr->code)
{
case LVN_COLUMNCLICK:
{
//获得点击的列的索引
int nCol = pNmListView->iSubItem;
//获得列标题中图标的索引
int nColImage = listCtrl.GetColumnImageIndex(nCol);
//SortItemFunc自己定义的排序回调函数,第二个参数传二个值(列索引,升序=0/降序=1)
//这个函数就是向ListCtrl控件发送的LVM_SORTITEMS消息
listCtrl.SortItem(SortItemFunc, MAKELPARAM(nCol, nColImage));
//排序后把图标索引改变(就在0和1之间)
listCtrl.SetColumnImageIndex(nCol, (nColImage == 0 ? 1 : 0)); }break; case LVN_DELETEITEM: //关闭窗口后删除行中保存New出来的内存地址
{
if (pNmListView->lParam != 0)
{
delete (StudentStruct*)pNmListView->lParam;
pNmListView->lParam = 0;
}
}break; }
} return 0;
}
2.自定义回调函数SortItemFunc
int CALLBACK SortItemFunc(LPARAM lParam1, LPARAM lParam2, LPARAM sortID)
{
//要比较的两行数据
//这两行的数据是保存在行的lParam数据中
//用SetItemData赋值的
StudentStruct* pStu1 = (StudentStruct*)lParam1;
StudentStruct* pStu2 = (StudentStruct*)lParam2; int nCol = LOWORD(sortID); //要比较的列索引
int nAcs = HIWORD(sortID); //按升序或是降序排序
int nRet = 0;
switch (nCol)
{
case 0: //姓名
nRet = _tcscmp(pStu1->name, pStu2->name);
break;
case 1: //性别
nRet = _tcscmp(pStu1->sex, pStu2->sex);
break;
case 2: //年龄,这是字符比较,如果是数字比较就要自己处理<,=,>的结果
//nRet = _tcscmp(pStu1->age, pStu2->age);
if (pStu1->age < pStu2->age)
nRet = -1;
if (pStu1->age == pStu2->age)
nRet = 0;
if (pStu1->age > pStu2->age)
nRet = 1; break;
case 3: //电话
nRet = _tcscmp(pStu1->tel, pStu2->tel);
break;
} return (nAcs == 0 ? nRet : -nRet);
}

点击性别示意图


点击年龄示意图


点击姓名示意图


感觉林这个性没排对,不只为啥?
Win32 ListCtrl控件点击列标题排序的更多相关文章
- datagridview 点击列标题排序
开发winform中,平时经常用到数据列表,我们大多选用datagridview,但是此控件本身没有排序的功能.参阅网上资料.留下标记,以后备用. datagridview的数据显示一般是通过数据绑定 ...
- WPF中的DataGridTemplateColumn实现点击列标题排序
在DataGrid中使用模板列时,默认功能中对点击列标题是不对列值进行排序的,要排序就需要添加以下两个属性: 1.CanUserSort="True" 2.SortMemberPa ...
- winform dataGridView 点击列标题排序
winform手动绑定数据后,点击列标题不能实现自动排序,苦苦寻找方法,发现下面的是可行的. //建立DataTable将当前dataGridView中的数据读进DataTable中 public D ...
- win32 listctrl控件右键菜单的实现
HMENU Menu_list,Menu_all; POINT point; HINSTANCE hInstance;//下面代码放到BOOL WINAPI DialogProc下 case WM_C ...
- VC/MFC ListCtrl 控件功能使用汇总(转)
以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...
- ListCtrl控件的使用
list contrl控件的使用 .建立基于对话框的应用程序,布置界面,设置属性. 注意添加的是listctrl控件,不是listbox控件,在控件工具箱的倒数第五行list control控件. 属 ...
- LISTCTRL控件方法
以下未经说明,listctrl默认view风格为report --------------------------------------------------------------------- ...
- ListCtrl控件
一 CListCtrl类型 LVS_EDITLABELS LVS_OWNERDRAWFIXED LVS_REPORT LVS_SHOWSELALWAYS LVS_SINGLESEL LVS_SMALL ...
- duilib中ListCtrl控件的实现
转载请说明出处,谢谢~~ 昨天在编程群里聊天,提到了ListCtrl,然后有网友找我,他需要做一个ListCtrl控件,我看过需求后接下了这个活.今天就把大致的思路和过程记录一下.首先看<任务书 ...
- ListCtrl控件着色
最近在写一款山寨的反病毒软件,大致功能已经实现,还有一些细小的环节需要细化. 其中,在界面编程中,就用到了给ListCtrl控件着色,查看了网上一些文章,终于实现了. 其实说白了,原理很简单,就是Li ...
随机推荐
- FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作
<FFmpeg开发实战:从零基础到短视频上线>一书的"3.4.3 把原始的H264文件封装为MP4格式"介绍了如何把H.264裸流封装为MP4文件.那么在网络上传输 ...
- 【换源】git命令行迁移仓库
直接git clone的话,查看本地分支,会只有默认主分支,可能是master,也可以能是设置的. 查看所有分支 git branch -a * master remotes/origin/HEAD ...
- 【论文阅读】自动驾驶光流任务 DeFlow: Decoder of Scene Flow Network in Autonomous Driving
再一次轮到讲自己的paper!耶,宣传一下自己的工作,顺便完成中文博客的解读 方便大家讨论. Title Picture Reference and pictures paper: https://a ...
- Go 如何对多个网络命令空间中的端口进行监听
Go 如何对多个网络命令空间中的端口进行监听 需求为 对多个命名空间内的端口进行监听和代理. 刚开始对 netns 的理解不够深刻,以为必须存在一个新的线程然后调用 setns(2) 切换过去,如果有 ...
- 【ClickHouse】0:clickhouse学习2之数据类型
一 :如何查看clickhouse具体支持哪些数据类型? 1:查看官方文档:https://clickhouse.tech/docs/en/sql-reference/data-types/ 2:查看 ...
- nuxt3正确使用keepalive页面缓存组件缓存
最近使用nuxt@3.x版本做SEO优化项目比较多,之前也踩坑过,所以记录一下在 nuxt3 中路由缓存的正确使用方法,本人也之前在GitHub社区中提交过反馈问题,最后是在 3.8.2 版本解决了路 ...
- Java Redis多限流
Java Redis多限流 在Java中实现Redis多限流通常涉及使用Redis的某些特性,如INCR.EXPIRE.Lua脚本或者更高级的Redis数据结构如Redis Bitmaps.Redis ...
- leetcode简单(数组,字符串,链表):[168, 171, 190, 205, 228, 448, 461, 876, 836, 844]
目录 168. Excel表列名称 171. Excel 表列序号 190. 颠倒二进制位 205. 同构字符串 228. 汇总区间 448. 找到所有数组中消失的数字 461. 汉明距离 876. ...
- SQL SERVER根据数据表的某个栏位查询另一个数据表符合条件的某个栏位的值,如果多行则合并为一张字符串形式
SQL SERVER根据数据表的某个栏位查询另一个数据表符合条件的某个栏位的值,如果多行则合并为一张字符串形式 要在 SQL Server 中根据一个数据表的某个列查询另一个数据表符合条件的某个列的值 ...
- [oeasy]python0002_终端_CLI_GUI_编程环境_游戏_真实_元宇宙 🥊
回忆 上次 了解了 python 语言的特点 历史悠久 功能强大 深受好评 已成趋势 3大主流操作系统 mac windows linux 添加图片注释,不超过 140 ...