关于CListCtrl排序的问题 我在网上找了一个ListCtrl排序的例子,是VC6.0写的。我把它移植在2005上面就不行了,半天没搞懂。我的ListCtrl是自己重写的类。不知道哪位高手能帮我解决这个排序的问题。最好有例子。非常感谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 codeproject上面clistctrl的重写非常多 这个在VS2005上面控件属性里面好像有个SORT选项吧。。 struct DATA{ CListCtrl *plist; int col;};bool fav=false;int CALLBACK MylistCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { DATA* MyData = (DATA*)lParamSort; int col = MyData->col;//点击的列项传递给col,用来判断点击了第几列 CString cstr,cstr2; cstr=MyData-> plist-> GetItemText((int)lParam1,col); cstr2=MyData-> plist-> GetItemText((int)lParam2,col); char ch1[MAX_PATH],ch2[MAX_PATH]; if(col==0) { wsprintfA(ch1, "%S",(LPCTSTR)cstr); wsprintfA(ch2, "%S",(LPCTSTR)cstr2); if(fav) return (atoi(ch1)-atoi(ch2)); else return (atoi(ch2)-atoi(ch1)); } else if(col==1) { cstr.Delete(cstr.GetLength()-1); cstr2.Delete(cstr2.GetLength()-1); wsprintfA(ch1, "%S",(LPCTSTR)cstr); wsprintfA(ch2, "%S",(LPCTSTR)cstr2); if(fav) return (int)(100*(atof(ch1)-atof(ch2))); else return (int)(100*(atof(ch2)-atof(ch1))); } return 0;}在OnLvnColumnclickList(,)添加 DATA data; data.col = pNMLV->iSubItem; data.plist = &m_articlelist; fav=!fav; int len=m_articlelist.GetItemCount(); for(int i=0;i<len;i++) {//设置列表项相关项,以便于排序 m_articlelist.SetItemData(i,(DWORD_PTR)i); } m_articlelist.SortItems(MylistCompare,(LPARAM)&data); 我的是Unicode环境下的,你要改改 改这个函数吗?MylistCompare 把sort属性加上, 给CListCtrl的BOOL SortItems( PFNLVCOMPARE pfnCompare, DWORD_PTR dwData ); 添加回调函数。如下:// Sort items by associated lParamint CALLBACK CListCtrlDlg::MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort){ UNREFERENCED_PARAMETER(lParamSort); return (int)(lParam1 - lParam2);} 如何实现对网页链接元素的鼠标右键点击操作? 怎样监听程序关闭? 如何释放鼠标 如何设置标签上的文字字体和颜色?? help!hurry!help! Win2K can't boot!! (high score! online waiting!) 简单问题 请问:有没有办法固定窗体的大小? 请问哪里可以下载objectARX? 很菜的问题 求解ZModem通讯协议源程序----有谁用过CZModemCore CFile类读写文件格式的问题 如何在对话框边框类型为none时,右击任务栏按钮显示系统菜单?
{
CListCtrl *plist;
int col;
};bool fav=false;int CALLBACK MylistCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
DATA* MyData = (DATA*)lParamSort;
int col = MyData->col;//点击的列项传递给col,用来判断点击了第几列
CString cstr,cstr2;
cstr=MyData-> plist-> GetItemText((int)lParam1,col);
cstr2=MyData-> plist-> GetItemText((int)lParam2,col);
char ch1[MAX_PATH],ch2[MAX_PATH];
if(col==0)
{
wsprintfA(ch1, "%S",(LPCTSTR)cstr);
wsprintfA(ch2, "%S",(LPCTSTR)cstr2);
if(fav)
return (atoi(ch1)-atoi(ch2));
else
return (atoi(ch2)-atoi(ch1));
}
else if(col==1)
{
cstr.Delete(cstr.GetLength()-1);
cstr2.Delete(cstr2.GetLength()-1);
wsprintfA(ch1, "%S",(LPCTSTR)cstr);
wsprintfA(ch2, "%S",(LPCTSTR)cstr2);
if(fav)
return (int)(100*(atof(ch1)-atof(ch2)));
else
return (int)(100*(atof(ch2)-atof(ch1)));
}
return 0;
}在OnLvnColumnclickList(,)添加
DATA data;
data.col = pNMLV->iSubItem;
data.plist = &m_articlelist;
fav=!fav;
int len=m_articlelist.GetItemCount();
for(int i=0;i<len;i++)
{//设置列表项相关项,以便于排序
m_articlelist.SetItemData(i,(DWORD_PTR)i);
}
m_articlelist.SortItems(MylistCompare,(LPARAM)&data);
改这个函数吗?MylistCompare
PFNLVCOMPARE pfnCompare,
DWORD_PTR dwData
);
添加回调函数。如下:
// Sort items by associated lParam
int CALLBACK CListCtrlDlg::MyCompareProc(LPARAM lParam1, LPARAM lParam2,
LPARAM lParamSort)
{
UNREFERENCED_PARAMETER(lParamSort); return (int)(lParam1 - lParam2);
}