CMFCListCtrl自动排序,该怎么处理

CMFCListCtrl自动排序
今天工作需要用CMFCListCtrl的排序功能,自己继承CMFCListCtrl类,
if (!m_wndListCtrl.Create(WS_CHILD | WS_BORDER | WS_TABSTOP | WS_VISIBLE | LVS_REPORT | LVS_SHOWSELALWAYS, CRect(0,0,200,200), this, ID_LIST_CTRL))
{
TRACE0("未能创建窗口\n");
return -1; // 未能创建
}
m_wndListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_ONECLICKACTIVATE);
重载OnCompareItems
int CMyListCtrl::OnCompareItems(LPARAM lParam1, LPARAM lParam2, int iColumn)  
{  
long i = (int)(lParam1);  
long j = (int)(lParam2);  
CString str1 = GetItemText(i, iColumn);  
CString str2 = GetItemText(j, iColumn);  
return str1.Compare(str2);
}
发现排序会有点乱。。要多点击几次排序,才能按顺序排列好。。
熟悉这个的兄弟们,麻烦指点下,要怎么做才行,还有,这个是按照字符比较,应该还有数字比较的吧?
网上看其他的ListCtrl里面的比较,要调用回调函数,CMFCListCtrl因该封装了的吧,不用回调了吧?

------解决方案--------------------
应该封装在OnCompareItems里了,这个函数里面实现你自己的比较方法,可以比较字符,也可以比较数字,根据你的需要来决定比较结果
------解决方案--------------------
没用过,帮顶下
------解决方案--------------------
是不是控件属性里有sort的功能可以实现啊
------解决方案--------------------
控件属性里有sort是不行的

::OnCompareItems里面要加这样的判断:
CString cstr1, cstr2;
cstr1 = GetItemText((int)(lParam1 < lParam2 ? lParam1 : lParam2), iColumn);
cstr2 = GetItemText((int)(lParam1 < lParam2 ? lParam2 : lParam1), iColumn);
即便这样,某一列排序正常,然后点击其他列排序,然后再回来排此列的序,就发现这列排序又不正常了,又要点击很多次才能排序正常。

------解决方案--------------------
排序规则要你自己设置,不是说一派生就行了的。 = =!