mfc的ClistCtrl控件列的排序
在网上看了许多排序的方法,都没看懂,初学者的悲剧,然后就自己弄了个,请大家指正.
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控件列的排序的更多相关文章
- MFC中CListCtrl控件的使用方法
定义一个派生类CViewList 派生于CListCtrl 在要包含该控件的类(CView)中定义一个CViewList类型的变量 CViewList m_wndListView; 在CView响应的 ...
- MFC实现 自适应操作系统的CListCtrl控件
新建对话框应用程序,删除自动生成的控件后,拖拽一个CListCtrl控件,绑定变量名为:m_listctrl.在对话框初始化成员函数OnInitDialog()中键入以下代码即可实现自适应系统的CLi ...
- CListCtrl控件使用方法总结
今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下: 以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtr ...
- 获取windows进程信息及CListCtrl控件(List Control)练习
环境:VS2010/MFC/对话框 效果图: 目录: 1. 关于windows进程信息获取 2. CListCtrl的使用 ------------------------------------ ...
- 【VS开发】CListCtrl控件使用方法总结
CListCtrl控件使用方法总结 今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下: 以下未经说明,listctrl默认view 风格为report 相关类 ...
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是总结了网上好多人写的文章,我只是汇总一下,加上部分自己的东西,在这里感谢所有在网 ...
- MFC中Listbox控件的简单使用
MFC中listbox控件是为了显示一系列的文本,每个文本占一行. Listbox控件可以设置属性为: LBS_CHILD :(默认)子窗口 LBS_Visible :(默认)可视 LBS_M ...
- VC的CListCtrl控件
1. CListCtrl 样式及设置 2. 扩展样式设置 3. 数据插入 4. 一直选中Item 5. 选中和取消选中Item 6. 得到CListCtrl中所有行的checkbox的状态 7. 得到 ...
- VC、MFC中设置控件的背景色、标题、字体颜色、字体要注意的地方[转]
在MFC中设置控件的背景色.字体.字体颜色.标题等属性主要是利用OnCtlColor函数来实现. 如: HBRUSH CAlarm::OnCtlColor(CDC* pDC, CWnd* pWnd, ...
- 最全的基于MFC的ActiveX控件开发教程
浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...
随机推荐
- Nuxt3 的生命周期和钩子函数(一)
title: Nuxt3 的生命周期和钩子函数(一) date: 2024/6/25 updated: 2024/6/25 author: cmdragon excerpt: 摘要:本文是关于Nuxt ...
- Unity中创建多边形并计算面积
问题背景: 我这边最近需要实现动态去画多边形(不规则的),类似于高德地图中那种面积测量工具一般. 方案: "割耳"算法实现三角化平面. 具体实现: 割耳算法类: /* ****** ...
- 在Mac上使用Emacs初步
其他操作系统估计也差不多. 安装 如果使用brew就是brew install emacs.安装后不会在Applications里面显示一个程序,需要在命令行里执行emacs. 使用 进入和退出 上面 ...
- vulnhub - BREACH: 1
vulnhub - BREACH: 1 描述 作为多部分系列中的第一部分,Breach 1.0 旨在成为初学者到中级的 boot2root/CTF 挑战.解决将需要可靠的信息收集和持久性相结合.不遗余 ...
- Docker部署JavaWeb项目(Tomcat环境)
一.环境准备 1.首先准备一台Centos 7的虚拟机并安装Docker. 2.准备好Tomcat.JDK的安装包以及该java项目的war包. 二.编写Dockerfile Dockerfile是一 ...
- yb课堂实战之订单和播放记录事务控制 《十六》
开启事务控制 启动类:@EnableTransactionManagement 业务类,或者业务方法@Transactional 默认事务的隔离级别和传播属性 启动类上加注解 Service层加注解
- LabVIEW的自定义按钮
下载几张图片: 比较好的 网站1:https://www.iconfont.cn/ 网站2:https://yesicon.app/ 选用windows风格按钮控件进行自定义, 自定义的图片分别放入这 ...
- 解决方案 | 1分钟快速解决 win10 任务管理器性能不显示GPU?
1 问题 环境:win10 22h2 2 解决方法 win+r输入dxdiag回车,查看下面信息: (1)确认你的Windows10版本号大于1909,如果确认,在任务管理器进程页右键名称一栏,将GP ...
- [oeasy]python0048_注释_comment_设置默认编码格式
注释Comment 回忆上次内容 使用了版本控制 git 制作备份 进行回滚 尝试了 嵌套的控制结构 层层 控制 不过 除非 到不得以 尽量不要 太多层次的嵌套 这样 从顶到底 含义 明确 ...
- Docker Engine在Centos下的安装
实践环境 Centos7.8 先决条件 CentOS 7.8. 必须开启 centos-extrasyum仓库源.默认是开启的,如果关闭了,需要重新开启,如下 编辑 /etc/yum.repos.d/ ...