2005.01.04发表于blog.csdn.net/zxub
这些时候研究ListControl的排序,真是头都要大了,我的情况是在一个dialog上放了多个ListControl,要在点击其中一个的一列的时候进行排序,在网上找了好多资料,讲得都不是很清楚,现在想来,不是没讲到要点,就是讲得太不清楚,让人云里雾里的,真是郁闷啊,讲清楚了的就没一个!!都是缺这少那的,走了不少错路,唉~~~
ListControl排序,是要靠参数项(LVIF_PARAM)的,回调函数进行比较,靠的就是它。这一点,我在问专家网上看到了,问题是象我这种初用VC++的人,怎么知道在哪里加那么个参数呢?找了好多地方,终于知道了:
LV_ITEM lvitem;
lvitem.mask=LVIF_PARAM;
lvitem.iItem=i;//i是一个数字,索引用的,自己定义
lvitem.lParam=i;
m_List_StaResult.SetItem(&lvitem);
上面的内容,要在往ListControl加项目的时候加上去,而且每个都要加的。
上面的知道了,好,轮到回调函数了。回调函数,主要问题是没有this指针用了,又要和当前对话框联系了,我找了下,有2种方法,一是把回调函数定义成友员函数,我没有成功,郁闷,定义成静态成员函数后,有种方法说用个全局指针指向当前对话框,我试着在头文件里定义一下,老说已经定义了,郁闷,试啊试,在cpp文件里定义下,居然ok了,唉~~好了,在初始函数里加上那么一句:g_dlg=this;这下在回调函数里调用一下,OK了.......
回调函数的内容如下:
int CALLBACK CStaMDiag::CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CString strItem1=g_dlg->m_List_StaResult.GetItemText((int)lParam1,(int)lParamSort);
CString strItem2=g_dlg->m_List_StaResult.GetItemText((int)lParam2,(int)lParamSort);
int r1=atoi(strItem1);
int r2=atoi(strItem2);
if (r1==r2)
return 0;
else
{
if (r1>r2)
return -1;
else return 1;
}
}
看看就知道3个参数的意思了,唉~~折腾了这么些时候终于好了。
鉴于初用VC++,老鸟看了多批评指正,谢谢!
这些时候研究ListControl的排序,真是头都要大了,我的情况是在一个dialog上放了多个ListControl,要在点击其中一个的一列的时候进行排序,在网上找了好多资料,讲得都不是很清楚,现在想来,不是没讲到要点,就是讲得太不清楚,让人云里雾里的,真是郁闷啊,讲清楚了的就没一个!!都是缺这少那的,走了不少错路,唉~~~
ListControl排序,是要靠参数项(LVIF_PARAM)的,回调函数进行比较,靠的就是它。这一点,我在问专家网上看到了,问题是象我这种初用VC++的人,怎么知道在哪里加那么个参数呢?找了好多地方,终于知道了:
LV_ITEM lvitem;
lvitem.mask=LVIF_PARAM;
lvitem.iItem=i;//i是一个数字,索引用的,自己定义
lvitem.lParam=i;
m_List_StaResult.SetItem(&lvitem);
上面的内容,要在往ListControl加项目的时候加上去,而且每个都要加的。
上面的知道了,好,轮到回调函数了。回调函数,主要问题是没有this指针用了,又要和当前对话框联系了,我找了下,有2种方法,一是把回调函数定义成友员函数,我没有成功,郁闷,定义成静态成员函数后,有种方法说用个全局指针指向当前对话框,我试着在头文件里定义一下,老说已经定义了,郁闷,试啊试,在cpp文件里定义下,居然ok了,唉~~好了,在初始函数里加上那么一句:g_dlg=this;这下在回调函数里调用一下,OK了.......
回调函数的内容如下:
int CALLBACK CStaMDiag::CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CString strItem1=g_dlg->m_List_StaResult.GetItemText((int)lParam1,(int)lParamSort);
CString strItem2=g_dlg->m_List_StaResult.GetItemText((int)lParam2,(int)lParamSort);
int r1=atoi(strItem1);
int r2=atoi(strItem2);
if (r1==r2)
return 0;
else
{
if (r1>r2)
return -1;
else return 1;
}
}
看看就知道3个参数的意思了,唉~~折腾了这么些时候终于好了。
鉴于初用VC++,老鸟看了多批评指正,谢谢!