修改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 成员
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值一样,而且从来都不变的。。
那个回调函数返回的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 成员
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值一样,而且从来都不变的。。
那个回调函数返回的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