c++ - Uncorrect sorting of columns ClistCtrl -
that's callback function:
int callback sortmeascending(lparam lparam1, lparam lparam2, lparam lparamsort) { int nretval = 0; pitemdata pdata1 = (pitemdata)lparam1; pitemdata pdata2 = (pitemdata)lparam2; switch(lparamsort) { case 0: if(pdata1->iseq < pdata2->iseq) nretval = -1; else if(pdata1->iseq > pdata2->iseq) nretval = 1; else nretval = 0; break; case 1: nretval = lstrcmp(pdata2->pszcuename, pdata1->pszcuename); break; case 2: nretval = lstrcmp(pdata2->psztags, pdata1->psztags); break; default: break; } return nretval; } int callback sortmedescending(lparam lparam1, lparam lparam2, lparam lparamsort) { int nretval = 0; pitemdata pdata1 = (pitemdata)lparam1; pitemdata pdata2 = (pitemdata)lparam2; switch(lparamsort) { case 0: if(pdata1->iseq > pdata2->iseq) nretval = -1; else if(pdata1->iseq < pdata2->iseq) nretval = 1; else nretval = 0; break; case 1: nretval = lstrcmp(pdata1->pszcuename, pdata2->pszcuename); break; case 2: nretval = lstrcmp(pdata1->psztags, pdata2->psztags); break; default: break; } return nretval; } that's oncompareitems:
int ctest::oncompareitems(lparam lparam1, lparam lparam2, int icolumn) { cmfcheaderctrl &headercntrl = getheaderctrl(); bool b = 0; if(headercntrl.isascending()) { return sortitems(sortmedescending, icolumn); } else { return sortitems(sortmeascending, icolumn); } } if follow post http://support.microsoft.com/kb/250614 don't have arrows of sorting in headers. if use method can see above, gap in sorting. click sorts , next time won't sort , again , again please me
i think need use cmfcheaderctrl::setsortcolumn set column's sort order. every time sort. in addition that, actual sort function should called hdn_itemclick handler.
so, assuming have specified this:
on_notify(hdn_itemclick, 0, onitemclicklist1) in onitemclicklist1 method write code:
void ctest::onitemclicklist1(nmhdr* pnmhdr, lresult* presult) { nmlistview *plv = (nmlistview *) pnmhdr; cmfcheaderctrl &headercntrl = getheaderctrl(); bool b = 0; if(headercntrl.isascending()) { headercntrl.setsortcolumn(plv->iitem, false); sortitems(sortmedescending, plv->iitem); } else { headercntrl.setsortcolumn(plv->iitem, true); sortitems(sortmeascending, icolumn); } *presult = 0; } and ditch oncompareitems
Comments
Post a Comment