| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 880 人关注过本帖
标题:关于listcontrol点击列表头 实现排序和你需排序的问题
只看楼主 加入收藏
聪儿
Rank: 1
等 级:新手上路
帖 子:75
专家分:3
注 册:2012-9-2
结帖率:77.78%
收藏
 问题点数:0 回复次数:1 
关于listcontrol点击列表头 实现排序和你需排序的问题
我的目的是实现listcontrol中 点击某一列列头时,可以实现本列的排序,再次点击实现逆序排序。
我的代码如下:
全局变量
    int sort_column; //标记点击排序的列
    int method[100]; //标记排序为逆序或者顺序
    int nrow=0;
初始化
    m_listcontrol.InsertColumn(0,"count");
    m_listcontrol.InsertColumn(1,"input numbers");
    m_listcontrol.InsertColumn(2,"results");


    CRect userRect;
    m_listcontrol.GetClientRect(userRect);
    m_listcontrol.SetColumnWidth(0,userRect.Width()/5);
    m_listcontrol.SetColumnWidth(1,userRect.Width()/5);
    m_listcontrol.SetColumnWidth(2,userRect.Width()*3/5);
添加项目
    m_listcontrol.InsertItem(nrow,count);
    m_listcontrol.SetItemText(nrow,1,input);
    m_listcontrol.SetItemText(nrow,2,output);
    nrow++;

[ 本帖最后由 聪儿 于 2012-12-3 23:23 编辑 ]
搜索更多相关主题的帖子: numbers method count 
2012-12-03 22:32
聪儿
Rank: 1
等 级:新手上路
帖 子:75
专家分:3
注 册:2012-9-2
收藏
得分:0 
比较函数
static int CALLBACK MyCompareProc(LPARAM lParam11, LPARAM lParam12, LPARAM lParam1sort)
{
    int row1=(int )lParam11;
    int row2=(int )lParam12;
    CListCtrl *lc =(CListCtrl *)lParam1sort;
    CString lp1=lc->GetItemText(row1,sort_column);
    CString lp2=lc->GetItemText(row2,sort_column);

    if(sort_column==1)
        if(method[sort_column])
        {
            method[sort_column]=1-method[sort_column];
            return atoi(lp1)-atoi(lp2);
        }
        else
        {
            method[sort_column]=1-method[sort_column];
            return atoi(lp2)-atoi(lp1);
        }
    else if(sort_column==2)
        if(method[sort_column])
        {
            method[sort_column]=1-method[sort_column];
            return (lp2);
        }
        else
        {
            method[sort_column]=1-method[sort_column];
            return (lp1);
        }
    return 0;
}
事件响应函数
void CDiagameDlg::OnColumnclickList2(NMHDR* pNMHDR, LRESULT* pResult)
{
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    // TODO: Add your control notification handler code here

    sort_column=pNMListView->iSubItem; // 取得需排序的列号
    int count=m_listcontrol.GetItemCount();//行数
    int i=0;

    while(i<3) // 点击第i列后,若method[i]=1时,第i列顺序(逆序)排列,再点击后逆序(顺序)排列,依次循环
    {
        method[i]=1;
        i++;
    }

    for(i=0;i<count;i++)
        m_listcontrol.SetItemData(i,i); // 设置比较关键字
   
    m_listcontrol.SortItems(MyCompareProc,(DWORD_PTR)&m_listcontrol);

    *pResult = 0;
}

以上为我写的函数,我的表头有三列,想实现的目的是 点击表头实现一次排序,逆序和顺序交替:可是却实现不了我的效果,现在主要问题有两个:
1,第一列无论如何无法实现排序,自己猜想是和 上贴中 红色代码有关,即第一列和其他列数据的插入方法不一样,应该导致了对应属性的某种差别吧。。
2,其他两列点击后的排序非常奇怪,例如,输入数据为“22 88 11 00 44 88 33”,点击一次后排序为“22 00 88 11 88 33 44”再点击一次后为“11 88 22 44 00 88 33”然后为“44 00 33 22 88 11 88”.。。。。完全不知道这么混乱的原因啊,还有时候会出现 两种序列的交替,但是也不是顺序或者逆序,



求大神指点啊。。。
</count;i++)
2012-12-03 23:27
快速回复:关于listcontrol点击列表头 实现排序和你需排序的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019375 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved