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控件点击列标题排序的更多相关文章

  1. datagridview 点击列标题排序

    开发winform中,平时经常用到数据列表,我们大多选用datagridview,但是此控件本身没有排序的功能.参阅网上资料.留下标记,以后备用. datagridview的数据显示一般是通过数据绑定 ...

  2. WPF中的DataGridTemplateColumn实现点击列标题排序

    在DataGrid中使用模板列时,默认功能中对点击列标题是不对列值进行排序的,要排序就需要添加以下两个属性: 1.CanUserSort="True" 2.SortMemberPa ...

  3. winform dataGridView 点击列标题排序

    winform手动绑定数据后,点击列标题不能实现自动排序,苦苦寻找方法,发现下面的是可行的. //建立DataTable将当前dataGridView中的数据读进DataTable中 public D ...

  4. win32 listctrl控件右键菜单的实现

    HMENU Menu_list,Menu_all; POINT point; HINSTANCE hInstance;//下面代码放到BOOL WINAPI DialogProc下 case WM_C ...

  5. VC/MFC ListCtrl 控件功能使用汇总(转)

    以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...

  6. ListCtrl控件的使用

    list contrl控件的使用 .建立基于对话框的应用程序,布置界面,设置属性. 注意添加的是listctrl控件,不是listbox控件,在控件工具箱的倒数第五行list control控件. 属 ...

  7. LISTCTRL控件方法

    以下未经说明,listctrl默认view风格为report --------------------------------------------------------------------- ...

  8. ListCtrl控件

    一 CListCtrl类型 LVS_EDITLABELS LVS_OWNERDRAWFIXED LVS_REPORT LVS_SHOWSELALWAYS LVS_SINGLESEL LVS_SMALL ...

  9. duilib中ListCtrl控件的实现

    转载请说明出处,谢谢~~ 昨天在编程群里聊天,提到了ListCtrl,然后有网友找我,他需要做一个ListCtrl控件,我看过需求后接下了这个活.今天就把大致的思路和过程记录一下.首先看<任务书 ...

  10. ListCtrl控件着色

    最近在写一款山寨的反病毒软件,大致功能已经实现,还有一些细小的环节需要细化. 其中,在界面编程中,就用到了给ListCtrl控件着色,查看了网上一些文章,终于实现了. 其实说白了,原理很简单,就是Li ...

随机推荐

  1. Python_10 debug、类和对象

    一.查缺补漏 APP测试流程梳理https://www.cnblogs.com/dengqing9393/p/6497068.html 有关类的知识点http://testingpai.com/art ...

  2. 【论文阅读】GRI: General Reinforced Imitation and its Application to Vision-Based Autonomous Driving

    Column: December 30, 2021 11:01 PM Last edited time: January 10, 2022 4:45 PM Sensor/组织: 3 RGB; 曾经短暂 ...

  3. InfluxDB 常用基本配置,启用账号密码登录,配置指定端口登录

    打开安装目录下的 influxdb.conf 找到 http 节点 配置完成后再安装目录下使用命令启动 influxdb influxd --config influxdb.conf 启动完成后,基本 ...

  4. python3 requests 请求https报错: urllib3.exceptions.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:992)

    正文 代码示例: #-*- coding:utf-8 -*- import requests url = "https://tst.com" res = requests.get( ...

  5. TCP/UDP 协议和 HTTP/FTP/SMTP 协议之间的区别

    前言 我们经常会听到HTTP协议.TCP/IP协议.UDP协议.Socket.Socket长连接.Socket连接池等字眼,然而它们之间的关系.区别及原理并不是所有人都能理解清楚. 计算机网络体系结构 ...

  6. Docker使用Dockerfile部署项目

    什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的指令自动生成镜像. 如何通过do ...

  7. Redis挂了,怎么补救?谈谈如何实现redis的高可用

    Redis挂了,怎么补救?谈谈如何实现redis的高可用! Redis实现高可用主要有三种部署模式:主从模式.哨兵模式和集群模式. 分区 分区(Partitioning)是一种最为简单的拓展方式. 在 ...

  8. yb课堂 注册-登陆-个人模块 《三十九》

    Cube-UI的form表单 https://didi.github.io/cube-ui/#/zh-CN/docs/form 注册 Register.vue <template> < ...

  9. Python代码学习

    1.生成四位数字字母验证码,大小写字母随机 import random if __name__ =="__main__": #四位数字字母验证码的生成 checkcode=&quo ...

  10. Apache Kyuubi 在B站大数据场景下的应用实践

    01 背景介绍 近几年随着B站业务高速发展,数据量不断增加,离线计算集群规模从最初的两百台发展到目前近万台,从单机房发展到多机房架构.在离线计算引擎上目前我们主要使用Spark.Presto.Hive ...