listview用LVS_SORTASCENDING样式排序,怎么不是整个记录整个记录的排的呢???

时间:2021-03-22 03:10:07
用listview,report样式,不用LVS_SORTASCENDING样式的时候插入了几个记录,每个记录三个字段,可以正常显示,

修改cs加上LVS_SORTASCENDING样式之后,,就全都乱了,,怎么回事??



另外,在OnLvnColumnclick函数里面调用的那个callback排序函数是怎么用的??csdn里面的例子是:
static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
   // lParamSort contains a pointer to the list view control.
   CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
   CString    strItem1 = pListCtrl->GetItemText(lParam1, 0);
   CString    strItem2 = pListCtrl->GetItemText(lParam2, 0);

   return strcmp(strItem2, strItem1);
}
void snip_CListCtrl_SortItems()
{
   // The pointer to my list view control.
   extern CListCtrl* pmyListCtrl;

   // Sort the list view items using my callback procedure.
   pmyListCtrl->SortItems(MyCompareProc, (LPARAM) pmyListCtrl);
}
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;怎么解释?lparamsort不是column的index吗?一个int型的数怎么会转换成CListCtrl*啊??

6 个解决方案

#1


up

#2


LVS_SORTASCENDING 是按主 Item 的字符串升序排列。

int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, 
   LPARAM lParamSort) {};

lParamSort 是调用 SortItems 传入的 LPARAM 参数,因为调用是

pmyListCtrl->SortItems(MyCompareProc, (LPARAM) pmyListCtrl);

所以 MyCompareProc 里见到的 lParamSort 就是 (LPARAM) pmyListCtrl 了

LPARAM lParam1, LPARAM lParam2 对应 SetItem LVITEM 结构中的 lParam 成员


#3


谢谢,,
那个回调函数返回的int是表示啥意思的??
我下面的函数不工作啊,程序没排序,是哪里的问题?

static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString    strItem1 = pListCtrl->GetItemText(lParam1, 0);
CString    strItem2 = pListCtrl->GetItemText(lParam2, 0);

return strcmp(strItem2, strItem1);
}

void Ctest01View::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

// TODO: 在此添加控件通知处理程序代码
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*) pNMHDR;

CListCtrl* pmyListCtrl = & GetListCtrl();
GetListCtrl().SortItems (MyCompareProc, (LPARAM) pmyListCtrl);

*pResult = 0;
}

检查的时候在MyCompareProc里面的strItem1和strItem2总是指向第一条记录的,why?
lParam1和lParam2值一样,而且从来都不变的。。

#4


up

#5


up another time

#6


up

#1


up

#2


LVS_SORTASCENDING 是按主 Item 的字符串升序排列。

int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, 
   LPARAM lParamSort) {};

lParamSort 是调用 SortItems 传入的 LPARAM 参数,因为调用是

pmyListCtrl->SortItems(MyCompareProc, (LPARAM) pmyListCtrl);

所以 MyCompareProc 里见到的 lParamSort 就是 (LPARAM) pmyListCtrl 了

LPARAM lParam1, LPARAM lParam2 对应 SetItem LVITEM 结构中的 lParam 成员


#3


谢谢,,
那个回调函数返回的int是表示啥意思的??
我下面的函数不工作啊,程序没排序,是哪里的问题?

static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString    strItem1 = pListCtrl->GetItemText(lParam1, 0);
CString    strItem2 = pListCtrl->GetItemText(lParam2, 0);

return strcmp(strItem2, strItem1);
}

void Ctest01View::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

// TODO: 在此添加控件通知处理程序代码
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*) pNMHDR;

CListCtrl* pmyListCtrl = & GetListCtrl();
GetListCtrl().SortItems (MyCompareProc, (LPARAM) pmyListCtrl);

*pResult = 0;
}

检查的时候在MyCompareProc里面的strItem1和strItem2总是指向第一条记录的,why?
lParam1和lParam2值一样,而且从来都不变的。。

#4


up

#5


up another time

#6


up