在网上看了许多排序的方法,都没看懂,初学者的悲剧,然后就自己弄了个,请大家指正.

ClistCtrl控件的行带着一个结构体,不过那结构体不好懂,看得眼花缭乱.好多也弄不明白,就自己写了个结构体,把一行的数据全写入结构体中,

交换两结构体的数据就简单多了.

typedef struct

{

wchar_t id[6];  //编号

wchar_t name[10]; //姓名

wchar_t sex[2];        //性别

int age;              //年龄

wchar_t fenlei[6];  //分类

wchar_t tel[12];       //电话

}myTongXiLu;

[.cpp]

写两个函数,把结构体写入指定行中,一个从指定行中的数据写入结构体中

//写入

void CMFCApp_CFile_testDlg::SetItemInofToxiluJG(int selIndex,myTongXiLu* toxilu)

{

CString str;

m_list.SetItemText(selIndex, 0, LPCTSTR(toxilu->id));

m_list.SetItemText(selIndex, 1, toxilu->name);

m_list.SetItemText(selIndex, 2, toxilu->sex);

str.Format(_T("%d"), toxilu->age);

m_list.SetItemText(selIndex, 3, str);

m_list.SetItemText(selIndex, 4, toxilu->fenlei);

m_list.SetItemText(selIndex, 5, toxilu->tel);

}

//读取数据

myTongXiLu CMFCApp_CFile_testDlg::GetToxiluJGInofItem(int selIndex)

{

CString str;

myTongXiLu toxilu;

_tcscpy_s(toxilu.id, m_list.GetItemText(selIndex, 0));

_tcscpy_s(toxilu.name, m_list.GetItemText(selIndex, 1));

_tcscpy_s(toxilu.sex, m_list.GetItemText(selIndex, 2));

str = m_list.GetItemText(selIndex, 3);

if (!str.IsEmpty() ||str.SpanIncluding(_T("0123456789"))==str)

toxilu.age = _ttoi(str);

else

{

toxilu.age = 0;

}

_tcscpy_s(toxilu.fenlei, m_list.GetItemText(selIndex, 4));

_tcscpy_s(toxilu.tel, m_list.GetItemText(selIndex, 5));

return toxilu;

}

接下来就是数据交换了,有的还要转换数字,我就懒得转换了,全是以字符串来比较,

rowInt:为要比较的总行数,原来没弄这参数,每次都要全部比较,所以后来弄个限制行数,比较了的行就不再比较,依次递减.

ColInt:为要比较的列的索引

bol:为true为升序,为flase为降序,

void CMFCApp_CFile_testDlg::CListCtrlShort(int rowInt,int ColInt, bool bol /*= true*/)

{

CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST1);

myTongXiLu toxi1, toxi2;

CString str1, str2;

int n = 0;

for (int i = 0; i<rowInt-1; i++)

{

toxi1 = GetToxiluJGInofItem(i);

toxi2 = GetToxiluJGInofItem(i + 1);

str1 = pList->GetItemText(i, ColInt);

str2 = pList->GetItemText(i + 1, ColInt);

n = StrCmpW(str1, str2);

if (bol = true)//判断是升序还是降序,为true为升序

{

if (n>0)

{

/*toxiT = toxi1;

toxi1 = toxi2;

toxi2 = toxiT;*/

SetItemInofToxiluJG(i, &toxi2);

SetItemInofToxiluJG(i + 1, &toxi1);

}

}

else

{

if (n < 0)

{

SetItemInofToxiluJG(i, &toxi2);

SetItemInofToxiluJG(i + 1, &toxi1);

}

}

}

}

//鼠标点击列表头事件

void CMFCApp_CFile_testDlg::OnHdnItemclickList1(NMHDR *pNMHDR, LRESULT *pResult)

{

*pResult = 0;

int colInt;

NMLISTVIEW* pListView = (NMLISTVIEW*)pNMHDR;

if (-1 != pListView->iItem)

{

colInt = pListView->iItem;//获得鼠标点击的列的索引

/*CString str;

str.Format(_T("item: %d, subitem: %d"), pListView->iItem, pListView->iSubItem);

AfxMessageBox(str);*/

}

//循环比较,最大的放最后,依次递减

for (int j=m_list.GetItemCount();j>=1;j--)

{

CListCtrlShort(j,colInt,true);

}

}

大功告成,以后再去学习它自带的结构体.

mfc的ClistCtrl控件列的排序的更多相关文章

  1. MFC中CListCtrl控件的使用方法

    定义一个派生类CViewList 派生于CListCtrl 在要包含该控件的类(CView)中定义一个CViewList类型的变量 CViewList m_wndListView; 在CView响应的 ...

  2. MFC实现 自适应操作系统的CListCtrl控件

    新建对话框应用程序,删除自动生成的控件后,拖拽一个CListCtrl控件,绑定变量名为:m_listctrl.在对话框初始化成员函数OnInitDialog()中键入以下代码即可实现自适应系统的CLi ...

  3. CListCtrl控件使用方法总结

    今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下: 以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtr ...

  4. 获取windows进程信息及CListCtrl控件(List Control)练习

    环境:VS2010/MFC/对话框 效果图: 目录: 1.  关于windows进程信息获取 2.  CListCtrl的使用 ------------------------------------ ...

  5. 【VS开发】CListCtrl控件使用方法总结

    CListCtrl控件使用方法总结 今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下: 以下未经说明,listctrl默认view 风格为report 相关类 ...

  6. VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程

      开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是总结了网上好多人写的文章,我只是汇总一下,加上部分自己的东西,在这里感谢所有在网 ...

  7. MFC中Listbox控件的简单使用

    MFC中listbox控件是为了显示一系列的文本,每个文本占一行.   Listbox控件可以设置属性为: LBS_CHILD   :(默认)子窗口 LBS_Visible :(默认)可视 LBS_M ...

  8. VC的CListCtrl控件

    1. CListCtrl 样式及设置 2. 扩展样式设置 3. 数据插入 4. 一直选中Item 5. 选中和取消选中Item 6. 得到CListCtrl中所有行的checkbox的状态 7. 得到 ...

  9. VC、MFC中设置控件的背景色、标题、字体颜色、字体要注意的地方[转]

    在MFC中设置控件的背景色.字体.字体颜色.标题等属性主要是利用OnCtlColor函数来实现. 如: HBRUSH CAlarm::OnCtlColor(CDC* pDC, CWnd* pWnd, ...

  10. 最全的基于MFC的ActiveX控件开发教程

    浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...

随机推荐

  1. Nuxt3 的生命周期和钩子函数(一)

    title: Nuxt3 的生命周期和钩子函数(一) date: 2024/6/25 updated: 2024/6/25 author: cmdragon excerpt: 摘要:本文是关于Nuxt ...

  2. Unity中创建多边形并计算面积

    问题背景: 我这边最近需要实现动态去画多边形(不规则的),类似于高德地图中那种面积测量工具一般. 方案: "割耳"算法实现三角化平面. 具体实现: 割耳算法类: /* ****** ...

  3. 在Mac上使用Emacs初步

    其他操作系统估计也差不多. 安装 如果使用brew就是brew install emacs.安装后不会在Applications里面显示一个程序,需要在命令行里执行emacs. 使用 进入和退出 上面 ...

  4. vulnhub - BREACH: 1

    vulnhub - BREACH: 1 描述 作为多部分系列中的第一部分,Breach 1.0 旨在成为初学者到中级的 boot2root/CTF 挑战.解决将需要可靠的信息收集和持久性相结合.不遗余 ...

  5. Docker部署JavaWeb项目(Tomcat环境)

    一.环境准备 1.首先准备一台Centos 7的虚拟机并安装Docker. 2.准备好Tomcat.JDK的安装包以及该java项目的war包. 二.编写Dockerfile Dockerfile是一 ...

  6. yb课堂实战之订单和播放记录事务控制 《十六》

    开启事务控制 启动类:@EnableTransactionManagement 业务类,或者业务方法@Transactional 默认事务的隔离级别和传播属性 启动类上加注解 Service层加注解

  7. LabVIEW的自定义按钮

    下载几张图片: 比较好的 网站1:https://www.iconfont.cn/ 网站2:https://yesicon.app/ 选用windows风格按钮控件进行自定义, 自定义的图片分别放入这 ...

  8. 解决方案 | 1分钟快速解决 win10 任务管理器性能不显示GPU?

    1 问题 环境:win10 22h2 2 解决方法 win+r输入dxdiag回车,查看下面信息: (1)确认你的Windows10版本号大于1909,如果确认,在任务管理器进程页右键名称一栏,将GP ...

  9. [oeasy]python0048_注释_comment_设置默认编码格式

    注释Comment 回忆上次内容 使用了版本控制 git 制作备份 进行回滚   尝试了 嵌套的控制结构 层层 控制   不过 除非 到不得以 尽量不要 太多层次的嵌套   这样 从顶到底 含义 明确 ...

  10. Docker Engine在Centos下的安装

    实践环境 Centos7.8 先决条件 CentOS 7.8. 必须开启 centos-extrasyum仓库源.默认是开启的,如果关闭了,需要重新开启,如下 编辑 /etc/yum.repos.d/ ...