MFC---利用标题对列表进行排序

1、新建基于MFC对话框的工程:myList
2、在工程中添加基于ClistCtrl的新类MyListCtrl
3、在对话框中添加ListContrl控件,打开 Class Wizard,添加控件对应变量m_mylist,继承自MyListCtrl类;在myList.h中添加头文件:MyListCtrl.h
这里写图片描述

4、在MyListCtrl.h中添加函数声明:

// Operations
public:
    //对ListControl控件中各项的比较函数
    static int CALLBACK Compare(LPARAM lPARAM1, LPARAM lPARAM2, LPARAM lParamSort);

// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(MyListCtrl)
    afx_msg void OnColumnClick(NMHDR *pNMHDR, LRESULT *pResult); //对LVN_COLUMNCLICK消息的处理函数
    //}}AFX_VIRTUAL

5、在MyListCtrl.cpp中添加消息映射、函数实现:

BEGIN_MESSAGE_MAP(MyListCtrl, CListCtrl)
    //{{AFX_MSG_MAP(MyListCtrl)
        // NOTE - the ClassWizard will add and remove mapping macros here.
    ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnClick)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// MyListCtrl message handlers

int CALLBACK MyListCtrl::Compare(LPARAM lPARAM1, LPARAM lPARAM2, LPARAM lParamSort)
{
    MyListCtrl *pListCtrl = reinterpret_cast<MyListCtrl*>(lParamSort);
    return 1;  //1说明排序,-1说明不排序
}

void MyListCtrl::OnColumnClick(NMHDR *pNMHDR, LRESULT *pResult)
{
    NM_LISTVIEW *pNMListView = (NM_LISTVIEW *)pNMHDR;
    SortItems(Compare, reinterpret_cast<DWORD>(this));

    *pResult = 0;
}

6、将列表控件风格选择为“报表”,在OnInitDialog中添加对列表控件的初始化

    m_myList.InsertColumn(0, "字母", LVCFMT_CENTER, 60, 0);
    m_myList.InsertColumn(1, "数字", LVCFMT_CENTER, 60, 0);

    m_myList.InsertItem(0, "0");
    m_myList.SetItemText(0, 0, "a");
    m_myList.SetItemText(0, 1, "1");

    m_myList.InsertItem(1, "1");
    m_myList.SetItemText(1, 0, "b");
    m_myList.SetItemText(1, 1, "2");

    m_myList.InsertItem(2, "2");
    m_myList.SetItemText(2, 0, "c");
    m_myList.SetItemText(2, 1, "3");

运行结果:
这里写图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值