Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7189549
  • 博文数量: 510
  • 博客积分: 12019
  • 博客等级: 上将
  • 技术积分: 6836
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-01 16:46
文章分类

全部博文(510)

文章存档

2022年(2)

2021年(6)

2020年(59)

2019年(4)

2018年(10)

2017年(5)

2016年(2)

2015年(4)

2014年(4)

2013年(16)

2012年(47)

2011年(65)

2010年(46)

2009年(34)

2008年(52)

2007年(52)

2006年(80)

2005年(22)

分类: C/C++

2007-01-26 16:38:36

1、首先增加List Control控件,改成report
2、分配一个控件变量:    CListCtrl m_ListState;
3、定义显示的头
    m_ListState.InsertColumn(0, "ID", LVCFMT_LEFT, 50);
    m_ListState.InsertColumn(1, " 目录", LVCFMT_LEFT, 150);
    m_ListState.InsertColumn(2, "所属组", LVCFMT_LEFT, 130);
    //m_ListState.SetExtendedStyle(LVS_EX_FULLROWSELECT);
    //设置为网格方式,更加美观
    m_ListState.SetExtendedStyle(m_ListState.GetExtendedStyle()|LVS_EX_GRIDLINES);
4、添加数据:添加两行数据
    int nItem=0;
    CString f1;
    CString f2;
    CString f3;
    int nNum=0;
    f1.Format("%d",nNum);
    f2.Format("%s", "aa");
    f3.Format("%s", "group");
    nItem = m_ListState.InsertItem(nNum, _T(f1));  // 插入第一列
    m_ListState.SetItemText(nItem, 1, _T(f2));  // 插入第二列
    m_ListState.SetItemText(nItem, 2, _T(f3));  // 插入第三列

    nNum=1;
    f1.Format("%d",nNum);
    f2.Format("%s", "bb");
    f3.Format("%s", "mm");
    nItem = m_ListState.InsertItem(nNum, _T(f1));  // 插入第一列
    m_ListState.SetItemText(nItem, 1, _T(f2));  // 插入第二列
    m_ListState.SetItemText(nItem, 2, _T(f3));  // 插入第三列

5、如果要对标题排序:
  以下文章来源:http://blog.csdn.net/precipitant/archive/2006/09/20/1254878.aspx

这两天写了一个程序,用到了CListCtrl,现把自己总结的排序的方法叙述一下。

首先建立一个formview的单文档exe工程,名为SortA

然后, 在dialog中添加一个 clistctrl控件,改成report

添加该控件的影射变量为:m_list

然后在 sortAview.h的类定义前面添加如下代码:

 

struct MyData{
     CListCtrl 
*listctrl;                 //CListCtrl控件指针
     int isub;        //l列号
     int seq;        //1为升序,0为降序
}
;

//次函数为非常重要函数。
int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)
{
     MyData 
*p=(MyData *)lParamSort;
     CListCtrl
* list =p->listctrl;
     
int isub=p->isub;
     LVFINDINFO findInfo; 
     findInfo.flags 
= LVFI_PARAM; 
     findInfo.lParam 
= lParam1; 
     
int iItem1 = list->FindItem(&findInfo, -1); 
     findInfo.lParam 
= lParam2; 
     
int iItem2 = list->FindItem(&findInfo, -1); 
     CString strItem1 
=list->GetItemText(iItem1,isub); 
     CString strItem2 
=list->GetItemText(iItem2,isub);
     
if(p->seq)
          
return strcmp(strItem2, strItem1);
     
else
          
return -strcmp(strItem2, strItem1);
}

 

然后,在CSortAView类的 OnInitialUpdate 中添加:

 

    SetProp(m_list.GetSafeHwnd(),"SORT_COLUMN",(HANDLE)0);
    SetProp(m_list.GetSafeHwnd(),
"SORT_DIRECTION",(HANDLE)1);
    
//为listctrl添加列头
    m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
      m_list.InsertColumn(
0,"姓名",LVCFMT_LEFT,100);
      m_list.InsertColumn(
1,"年龄",LVCFMT_LEFT,100);
    m_list.InsertColumn(
2,"妻子的数目",LVCFMT_LEFT,100);
   
//为listctrl添加三个item
    m_list.InsertItem(0,"陈水扁",0);    
    m_list.SetItemText(
0,1,"66");         
    m_list.SetItemText(
0,2,"67");    

    m_list.InsertItem(
1,"游西堃",0);    
    m_list.SetItemText(
1,1,"85");          
    m_list.SetItemText(
1,2,"56");    
     
    m_list.InsertItem(
2,"布什",0);
    m_list.SetItemText(
2,1,"77");          
    m_list.SetItemText(
2,2,"26");
    
    
//下面是为每一个item设置一个 itemdata
    
//如果要用sortItems排序,这个是必须的。但是他的值不会影响到排序
    m_list.SetItemData(0,(DWORD)"垃圾");     
    m_list.SetItemData(
1,(DWORD)"白痴"); 
    m_list.SetItemData(
2,(DWORD)"傻叉"); 

 

然后,CListCtrl控件的 LVN_COLUMNCLICK 消息影射,并添加代码如下:

 

void CSortAView::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
     NM_LISTVIEW
* pNMListView = (NM_LISTVIEW*)pNMHDR;
     
// TODO: Add your control notification handler code here
      MyData *tmpp=new MyData;
     tmpp
->listctrl=&m_list;
     tmpp
->isub=pNMListView->iSubItem;
     
int sortnum=(int)GetProp(m_list.GetSafeHwnd(),"SORT_COLUMN");
     
int sortasc=(int)GetProp(m_list.GetSafeHwnd(),"SORT_DIRECTION");
     
if(sortnum==pNMListView->iSubItem){
        sortasc
=(sortasc+1)%2;
        SetProp(m_list.GetSafeHwnd(),
"SORT_DIRECTION",(HANDLE)sortasc);
     }

     SetProp(m_list.GetSafeHwnd(),
"SORT_COLUMN",(HANDLE)pNMListView->iSubItem);
     tmpp
->seq=sortasc;
     m_list.SortItems(CompareFunc,(LPARAM)tmpp);




     
*pResult = 0;
}

 

经过上面的努力,整个程序就完成了。您可以看到如下的界面:

 


阅读(2814) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~