怎么对 listctrl 的第一列排序?

暗石绿 2006-06-14 02:35:58
我在 OnInitDialog() 初始化了 listctrl 的数据。
初始化完毕,想马上给第一列排序。

谁能给个简单的例子。(不要使用派生类,谢谢)
...全文
220 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lena1220 2006-07-12
  • 打赏
  • 举报
回复
帮顶了
暗石绿 2006-06-14
  • 打赏
  • 举报
回复
贴子回复次数大于跟给分次数
handsomerun 2006-06-14
  • 打赏
  • 举报
回复
不行是因为插入每一行的记录的时候,要加入LVIF_PARAM


mask加入LVIF_PARAM

然后设置lParam的值为你的行号,这样就可以了

就是说你在调用CListCtrl::InsertItem
int InsertItem( const LVITEM* pItem );

int InsertItem( int nItem, LPCTSTR lpszItem );

int InsertItem( int nItem, LPCTSTR lpszItem, int nImage );

int InsertItem( UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState, UINT nStateMask, int nImage, LPARAM lParam );


这些的时候,要用那个lParam
明白了吗??我试过了,就是这么做的
暗石绿 2006-06-14
  • 打赏
  • 举报
回复
感谢感谢。
天地客人 2006-06-14
  • 打赏
  • 举报
回复
帮你UP了
折腾_苏州 2006-06-14
  • 打赏
  • 举报
回复
以下可实现点击任一列的Header可对该列排序:
//---------list排序--------------(cpp文件)
int m_iSortCol;//待排序列(第几列)
BOOL m_fAsc;//是否顺序排序
static int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CListCtrl *pListCtrl = (CListCtrl *)lParamSort;
CString strItem1 = pListCtrl->GetItemText(lParam1, m_iSortCol);
CString strItem2 = pListCtrl->GetItemText(lParam2, m_iSortCol);

int nRet = strcmp(strItem1, strItem2);

if (m_fAsc) nRet *= -1;
return nRet;
}

void CPage::OnColumnclickList(NMHDR* pNMHDR, LRESULT* pResult) //添加单击列事件
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
int i = m_list.GetItemCount();
CString str,strNewData;
CString str1;
while(i--)
m_list.SetItemData(i, i);

if( pNMListView->iSubItem == m_iSortCol )
{
m_fAsc = !m_fAsc;
}
else
{
m_fAsc = TRUE;
m_iSortCol = pNMListView->iSubItem;
}
m_list.SortItems( ListCompare, (DWORD)&m_list );
*pResult = 0;
}
暗石绿 2006-06-14
  • 打赏
  • 举报
回复
int CALLBACK CProcessDlg::ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(lParam1, 0);
CString strItem2 = pListCtrl->GetItemText(lParam2, 0);

return wcscmp(strItem2, strItem1);
}


m_IDC_LIST1.SortItems(ListCompare, (DWORD) &m_IDC_LIST1);
// 根本 就没有排序啊。。。
help help help
我是菜鸟。。。
折腾_苏州 2006-06-14
  • 打赏
  • 举报
回复
listctrl 右键属性=>Styles=>Sort列表框里面就有了Ascending(升) / Descending(降)
handsomerun 2006-06-14
  • 打赏
  • 举报
回复
看一下msdn上的例子就可以了
CListCtrl::SortItems

Example

// Sort the item in reverse alphabetical order.
static int CALLBACK
MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// lParamSort contains a pointer to the list view control.
// The lParam of an item is just its index.
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);
}

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧