1.listctrl的自动排序如何实现?????listctrl风格中有自动排序的,我要在listctrl创建好后,改变他的风格,加上排序的,可是我改变了后,没有什么反映.
2.listctrl对齐到网格如何实现>??????这个真的不知道怎么去做

解决方案 »

  1.   

    http://support.microsoft.com/kb/250614/en-us
      

  2.   

    listctrl对齐到网格 
    ????
      

  3.   

    排序功能的实现  列表控制有一个特殊的功能,当以详细资料方式显示时,列表顶部的表头可以当作按钮来使用,这可以通过列表控制创建时的风格来控制。当鼠标点击列表头名称时,列表控制就会向其父窗口发送一个LNV_COLUMNCLICK消息,利用类导向中列表控制 IDC_LISTCTRL对应的LNV_COLUMNCLICK消息加入相应处理函数,就可将表列按照特定顺序进行排列。其函数使用方法见程序,其中 iSort为排序的表列索引号,(PFNLVCOMPARE)CompareFunc为进行具体排序的回调函数,也就是说,通过鼠标点击表头实现的排序过程是由第三方开发的专用排序函数来实现的,排序函数只是实现表项的具体比较操作,而整个排序过程是由SortItemS属性通过不断调用这个函数来实现的。正常的排序过程是升序方式,通过调换排序函数中的参数值,就可实现降序排列,即将PARAM1与PARAM2调换位置。这个回调函数的前两个参数为表列中表项的索引号,第三个参数为排序的表列索引号。void CVCLISTDlg::OnColumnclickListctrl(NMHDR* pNMHDR, LRESULT* pResult){ //鼠标左键单击表头处理函数NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;// TODO: Add your control notification handler code herestatic int iSorted=-1;//排列序号if (pNMListView->iSubItem==iSorted) return;iSorted=pNMListView->iSubItem;m_ListCtrl.SortItems((PFNLVCOMPARE)CompareFunc,iSorted);*pResult = 0;}//排序时比较表项的回调函数int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2,LPARAM lParamSort){ char *text1,*text2;switch (lParamSort){case 0L:text1=Sps[lParam1].szPm;text2=Sps[lParam2].szPm;break;case 1L:text1=Sps[lParam1].szSl;text2=Sps[lParam2].szSl;break;case 2L:text1=Sps[lParam1].szDj;text2=Sps[lParam2].szDj;break;case 3L:text1=Sps[lParam1].szJe;text2=Sps[lParam2].szJe;break;}return (strcmp(text1,text2));//结果为>0 =0 <0}