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");
运行结果: