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

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. 基于Python和TensorFlow实现BERT模型应用

    本文分享自华为云社区<使用Python实现深度学习模型:BERT模型教程>,作者: Echo_Wish. BERT(Bidirectional Encoder Representation ...

  2. 【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(2)

    1.问题描述: 怎么判断登录的华为帐号有变动? 解决方案: 华为帐号登录成功后会返回唯一标识OpenID和UnionID,如果切换不同的华为帐号登录,这个唯一标识会变. OpenID是华为帐号用户在不 ...

  3. python重拾基础第一天

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  4. GUI测试稳定性的关键技术

    标签(空格分隔): GUI测试稳定性 GUI测试稳定性的关键技术 GUI 自动化测试稳定性,最典型的表现形式就是,同样的测试用例在同样的环境上,时而测试通过,时而测试失败. 这也是影响 GUI 测试健 ...

  5. Java-Request对象是用来回去请求信息,得到页面的请求

    1.Request 1.1 request对象和response对象的原理(了解) request对象和response对象是由服务器创建的,我们来使用他们即可 request对象是用来回去请求信息, ...

  6. 【数据集】Maple-IDS——网络安全恶意流量检测数据集

    一.数据集介绍 Maple-IDS数据集是一个网络入侵检测评估数据集,旨在增强异常基础入侵检测系统(IDS)和入侵预防系统(IPS)的性能和可靠性.随着网络空间安全领域攻击的日益复杂化,拥有一个可靠和 ...

  7. mysql 临时表的好处

    客户端新建了一个会话,这个会话只是服务器与客户端1对1的关系,客户端可能在服务端建立一个临时表,满足客户端处理某些事务的需求,当客户端退出会话后,这个临时表自动drop,没有任何数据信息占用数据库空间 ...

  8. socket通讯原理及例程(一看就懂

    来源:https://blog.csdn.net/jiushimanya/article/details/82684525 里面有疑问或者不正确的地方可以给我留言 对TCP/IP.UDP.Socket ...

  9. 调试 Node.js

    调试 Node.js 调试器 调试器是一种软件工具,用于通过分析方法观察和控制程序的执行流 设计目标:帮助找出 bug 的根本原因,并帮助你解决它 工作方式:将程序托管在自己的执行进程中或者作为附加到 ...

  10. hbuilderx打正式包所需的私钥证书的创建方法

    现在使用uniapp作为底层框架来开发app应用已经成为了很多公司的事实标准,而uniapp的开发工具hbuilderx云打包的时候,需要私钥证书和证书profile文件. 而且还需要将打包好的ipa ...