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

Popular posts from this blog

c++ - CryptStringToBinary API behavior -

java.util.scanner - How to read and add only numbers to array from a text file -

iphone - Three second countdown in cocos2d -