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. 实验12.dhcp服务器实验

    实验12.dhcp服务器实验 测试DHCP服务的可用性 实验组 交换机配置 R1 interface GigabitEthernet0/0/0 ip address 192.168.1.1 255.2 ...

  2. uboot 添加 自定义命令

    --- title: uboot-uboot 添加 自定义命令 date: 2020-05-13 16:51:38 categories: tags: - uboot - cmd - config - ...

  3. .NET 6 Entity Framework Core Db First(1) 创建模型

    项目准备 1.开发环境 vs2022  .NET6 2.创建项目 新建项目 ASP.NET Core Web API,解决方案名称:EFDBFirstDemo,项目名称:EFDBFirstDemo.A ...

  4. CF372C

    思路 根据题意可以得到dp转移方程是 \(f_{i,j}=\max\{f_{i-1,k}+b_i-|a_i-j|\}\) 而且 \(j-(t_{i}-t_{i-1})\times d\le k\le ...

  5. Pyechart绘图基础

    1.绘制散点图 from pyecharts.charts import Scatter import pyecharts.options as opts import numpy as np x = ...

  6. 小程序-云数据库的add,get,remove,update

    云数据库的使用就是使用简单的原生封装wx.cloud.database().collection("list"),然后就是add,get,remove,update四个方法 初始化 ...

  7. centos下安装Docker容器

    安装前的准备工作 1.列出docker安装过的相关包 sudo yum list installed | grep docker 2.删除相关安装包 #根据查找出来的进行删除,不同版本可能有不一样的情 ...

  8. Java JVM——12. 垃圾回收理论概述

    1.前言 1.1 什么是垃圾? 在提到什么是垃圾之前,我们先看下面一张图: 从上图我们可以很明确的知道,Java 和 C++ 语言的区别,就在于垃圾收集技术和内存动态分配上,C++ 语言没有垃圾收集技 ...

  9. TypeScript 学习笔记 — 类型推断和类型保护(十一)

    目录 类型推断 1.赋值推断 2.返回值推断 3.函数推断(反向推断) 4.属性推断 5.类型反推 6.索引访问操作符 7.类型映射 类型保护 1.typeof 类型保护 2.instanceof 类 ...

  10. oeasy教您玩转vim - 84 - # 命令command

    ​ 命令 command 回忆 关于 函数function 可以调用别的函数 :call append(0,"oeasy o2z o3z") 还可以执行表达式 :call exec ...