ListCtrl控件的简单使用

=============================================================

标题:ListCtrl控件的简单使用

摘要:

备注 Windows CE 5.0

日期:2010.5.1

姓名:朱铭雷

=============================================================

    1 头文件中声明一个CImageList对象指针,该对象用来存储ListCtrl控件所要使用的图标。

CImageList * m_pImageList;

 

    2 动态创建一个CImageList对象。此处要注意图标的大小,32*32的图标Report视图将不能够使用。

m_pImageList = new CImageList();

m_pImageList->Create(16,16,TRUE,4,4);

 

    3 为m_pImageList加载图标

CListCtrlNTApp *pApp;

pApp = (CListCtrlNTApp *)AfxGetApp();

m_pImageList->Add(pApp->LoadIconW(IDI_ICON1));

m_pImageList->Add(pApp->LoadIconW(IDI_ICON2));

m_pImageList->Add(pApp->LoadIconW(IDI_ICON3));

m_pImageList->Add(pApp->LoadIconW(IDI_ICON4));

 

    4 在对话框中放置一个ListCtrl控件,并将ID设置为:IDC_LISTCTRL

 

    5 通过代码设置ListCtrl控件新属性,注意只改变自己关心的属性,如下面这种方式:

long lMask = LVS_SINGLESEL | LVS_EDITLABELS | LVS_NOLABELWRAP | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | LVS_ICON | LVS_SMALLICON | LVS_REPORT | LVS_LIST |

 LVS_SORTASCENDING | LVS_SORTDESCENDING | LVS_ALIGNLEFT;

 

lStyle = 0;

lStyle |= LVS_SINGLESEL; //设置单选属性

lStyle |= LVS_EDITLABELS; //可以编辑标签

lStyle |= LVS_REPORT; //设置为报表样式

lStyle |= LVS_SORTASCENDING; //升序排列

lStyle |= LVS_ALIGNLEFT; //左对齐

 

CListCtrl * pListCtrl = (CListCtrl *)GetDlgItem(IDC_LISTCTRL);

long lNewStyle = GetWindowLong(pListCtrl->m_hWnd,GWL_STYLE);

lNewStyle &= ~lMask;

lNewStyle = lNewStyle | lStyle;

 

    6 以指定样式重新创建ListCtrl控件,并设置该控件的图标列表。

CRect rect;

GetClientRect(&rect);

pListCtrl->DestroyWindow();

pListCtrl->Create(lNewStyle,rect,this,IDC_LISTCTRL); //创建列表视图控件

pListCtrl->SetImageList(m_pImageList,LVSIL_SMALL); //设置列表视图控件的图标列表

 

    7 定义列表视图的列并向列表视图里添加内容

    TCHAR rgtsz[2][10];

    _tcscpy(rgtsz[0],_T("书名"));

    _tcscpy(rgtsz[1],_T("作者"));

 

    TCHAR rgtszIconType[4][12];

    _tcscpy(rgtszIconType[0],_T("vc++技术内幕"));

    _tcscpy(rgtszIconType[1],_T("windows程序设计"));

    _tcscpy(rgtszIconType[2],_T("c++ primer"));

    _tcscpy(rgtszIconType[3],_T("深入浅出MFC"));

 

    TCHAR rgtszIconDescrip[4][50];

    _tcscpy(rgtszIconDescrip[0],_T("David Kruglinski"));

    _tcscpy(rgtszIconDescrip[1],_T("CharlesPetzold"));

    _tcscpy(rgtszIconDescrip[2],_T("Lippman"));

    _tcscpy(rgtszIconDescrip[3],_T("侯捷"));

 

    //定义列表视图的列

    int i;

    LV_COLUMN lvcolumn;

    for(i=0; i<2; i++)

    {

        lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;

        lvcolumn.fmt = LVCFMT_LEFT;

        lvcolumn.pszText = rgtsz[i];

        lvcolumn.iSubItem = i;

        lvcolumn.cx = rect.Width()/2;

        pListCtrl->InsertColumn(i,&lvcolumn);

    }

 

    //向列表视图里添加内容

    int iItem, iSubItem, iActualItem, iIcon;

    LV_ITEM lvitem;

    for(iItem=0; iItem<4; iItem++)

    {

        for(iSubItem=0; iSubItem<2; iSubItem++)

        {

            lvitem.mask = LVIF_TEXT | (iSubItem == 0? LVIF_IMAGE: 0);

            lvitem.iItem = (iSubItem == 0)? iItem: iActualItem;

            lvitem.iSubItem = iSubItem;

            lvitem.pszText = iSubItem == 0? rgtszIconType[iItem]:rgtszIconDescrip[iItem];

            lvitem.iImage = iItem;

            //判断,如果是添加第列,则应该添加一行,否则只要设置这一行即可

            if(0 == iSubItem)

                iActualItem = pListCtrl->InsertItem(&lvitem);

            else

                pListCtrl->SetItem(&lvitem);

        }

    }

 

    8 设置ListCtrl控件具有CheckBox。

pListCtrl->SetExtendedStyle(LVS_EX_CHECKBOXES);

 

    9 添加对话框WM_DESTROY消息的响应函数,并在其中销毁动态创建的CImageList对象。

delete m_pImageList;

m_pImageList = NULL;

   

    10 添加ListCtrl控件的NM_DBLCLK事件响应函数,在该响应函数中判断当前选中行的索引,并输出到IDE环境。

CListCtrl * pListCtrl = (CListCtrl *)GetDlgItem(IDC_LISTCTRL);

CString str;

for(int i=0; i<pListCtrl->GetItemCount(); i++ )

{

   if( pListCtrl->GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || pListCtrl->GetCheck(i))

   {

        str.Format(_T("第%d行的checkbox为选中状态/n"), i);

        TRACE(str);

   }

}

    11 ListCtrl控件的使用效果如图:

 

    双击“C++ Primer”,IDE输出窗口输出:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值