C++ ListView按错误列排序
在这个winapi程序中,我根据“日期”列对所有项目进行排序。但是,它是按“说明”列排序,而不是按“日期”列排序。 以下是WM_NOTIFY中的代码:C++ ListView按错误列排序,c++,c,sorting,listview,winapi,C++,C,Sorting,Listview,Winapi,在这个winapi程序中,我根据“日期”列对所有项目进行排序。但是,它是按“说明”列排序,而不是按“日期”列排序。 以下是WM_NOTIFY中的代码: static char szText[10]; NM_LISTVIEW *pNm = (NM_LISTVIEW *)lParam; switch (((LPNMHDR)lParam)->code) { case LVN_COLUMNCLICK: if (pNm->iSubItem == 2)
static char szText[10];
NM_LISTVIEW *pNm = (NM_LISTVIEW *)lParam;
switch (((LPNMHDR)lParam)->code) {
case LVN_COLUMNCLICK:
if (pNm->iSubItem == 2)
if (ListView_SortItems(pNm->hdr.hwndFrom, CompareFunc,
(LPARAM) (pNm->iSubItem)) == FALSE)
MessageBox(hwnd, "FALSE", "", MB_OK);
break;
/* other WM_NOTIFY code */
}
ListView\u SortItems
奇怪地返回TRUE。
下面是CompareFunc函数:
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
if (lParamSort == 2) {
date d1, d2; // app-defined "date" class
char b1[32], b2[32];
sscanf((char *) lParam1, "%s %d %d", b1, &d1.day, &d1.yr);
sscanf((char *) lParam2, "%s %d %d", b2, &d2.day, &d2.yr);
d1.month = monthtoi(b1); // converts month as string to number
d2.month = monthtoi(b2);
if (d1 > d2) // overloading the ">" and "<" operators
return 1;
else if (d1 < d2)
return -1;
return 0;
}
}
int回调CompareFunc(lparamlparam1、lparamlparam2、lparamlparamsort)
{
if(lParamSort==2){
日期d1,d2;//应用程序定义的“日期”类
字符b1[32],b2[32];
sscanf((字符*)lParam1,“%s%d%d”,b1,&d1.day,&d1.yr);
sscanf((字符*)lParam2、%s%d%d)、b2和d2.day和d2.yr);
d1.month=monthtoi(b1);//将月份作为字符串转换为数字
d2.月=月(b2);
如果(d1>d2)//重载“>”和“输入的lParam1
和lParam2
不是子项的字符串,而是与该项相关的数据:
lParam1参数是与第一个
正在比较的项;lParam2参数是关联的值
使用第二项。这些是在
插入项时项的LVITEM结构的lParam成员
进入名单
您可以找到完整的ListView排序示例,但其基本内容如下:
// Custom type storing the item's information, or a link to it
struct myitemdata_t
{
char* pFood;
char* pDescription;
date Date;
...
};
// When adding items to a listview set the item data
m_ctlListView.InsertItem(i, "food");
m_ctlListView.SetItemText(i, 1, "Saturday shopping");
...
// Set the item data for the list item
m_ctlListView.SetItemData(i, (LPARAM) GetItemData(i));
// Your sort function should look like
int CALLBACK SortFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
myitemdata_t* pData1 = (myitemdata_t *)lParam1;
myitemdata_t* pData2 = (myitemdata_t *)lParam2;
...
由于我们无法看到monhtoi
或您的操作员>
实现的实现,因此没有什么帮助。我们也无法看到您的LVITEM
s。是否正确设置了lParam
成员?更改了答案@IInspectable
// Custom type storing the item's information, or a link to it
struct myitemdata_t
{
char* pFood;
char* pDescription;
date Date;
...
};
// When adding items to a listview set the item data
m_ctlListView.InsertItem(i, "food");
m_ctlListView.SetItemText(i, 1, "Saturday shopping");
...
// Set the item data for the list item
m_ctlListView.SetItemData(i, (LPARAM) GetItemData(i));
// Your sort function should look like
int CALLBACK SortFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
myitemdata_t* pData1 = (myitemdata_t *)lParam1;
myitemdata_t* pData2 = (myitemdata_t *)lParam2;
...