关闭

Windows编程基础--第11节 MFC之列表控件CListCtrl

标签: mfcwindows
2032人阅读 评论(0) 收藏 举报
分类:

Windows编程基础–第11节 MFC之列表控件CListCtrl

在MFC程序中列表控件也是使用很频繁的控件,例如windows的资源管理器就可以用列表控件来实现,如下图:
这里写图片描述
列表控件具有以下四种视图:

  1. 大图标
  2. 小图标
  3. 列表
  4. 详细信息

1. 新建项目

新建一个基于对话框项目“day13”,布置界面如下,从左侧“工具箱”拖动一个List control到界面,再加上两个按钮及Combo Box,如图:
这里写图片描述

控件名 控件ID
List control IDC_LIST_VIEW
Combo Box IDC_COMBO2
添加行 IDC_BUTTON_ADD
删除行 IDC_BUTTON_DEL

2. 添加列表控件变量

单击选中列表控件,右击选择->“添加变量”,添加变量名为m_list,如下:
这里写图片描述

3. 初始化列表控件

切换到对话框的初始化函数(OnInitDialog()),我们来给列表控件增加三列,
这里写图片描述

    m_list.ModifyStyle(LVS_TYPEMASK, LVS_REPORT); //设置列表控件样式为详细信息
    m_list.InsertColumn(0,_T("第一列"),LVCFMT_LEFT,120);
    m_list.InsertColumn(1,_T("第二列"),LVCFMT_LEFT,120);
    m_list.InsertColumn(2,_T("第三列"),LVCFMT_LEFT,120);

4. 添加列表图标

自行下载或者制作两个bmp图标,分别为16*16,和32*32;将图标复制到项目的res资源目录中,这里写图片描述
切换到资源视图,右击添加资源,导入我们准备好的图标,如图所示:
这里写图片描述
导入好之后我们可以更改位图ID,如图所示:
这里写图片描述
接下来我们在day13.h的头文件中添加两个成员变量:

    CImageList m_ilLarge;
    CImageList m_ilSmall; 

分别来对应32*32,和16*16;
然后我们再切换到初始化函数中,添加如下四行代码:

    m_ilLarge.Create(IDB_BITMAP_32, 32, 1,RGB(255,0,255));
    m_ilSmall.Create(IDB_BITMAP_16, 16, 1,RGB(255,0,255));

    m_list.SetImageList(&m_ilLarge,LVSIL_NORMAL);
    m_list.SetImageList(&m_ilSmall,LVSIL_SMALL);

5. 实现添加行按钮函数

双击“添加行”按钮,编辑按钮点击方法:

void Cday13Dlg::OnBnClickedButtonAdd()
{
    // TODO: 在此添加控件通知处理程序代码
    int nCount = m_list.GetItemCount();
    CString strText;
    strText.Format(_T("第%d行,第一列"), nCount + 1);
    m_list.InsertItem(nCount,strText,0);
    strText.Format(_T("第%d行,第二列"), nCount + 1);
    m_list.SetItemText(nCount,1,strText);
    strText.Format(_T("第%d行,第三列"), nCount + 1);
    m_list.SetItemText(nCount,2,strText);
}

注意,只有添加第一行第一个元素是才是InsertItem,之后的添加都应该是SetItemText,防止出错;

5. 实现删除行按钮函数

双击“删除行”按钮,编辑按钮点击方法:

void Cday13Dlg::OnBnClickedButtonDel()
{
    // TODO: 在此添加控件通知处理程序代码
    int nCount = m_list.GetItemCount();
    for (int i = nCount; i>=0 ; --i)
    {
        if (m_list.GetItemState(i,LVIS_SELECTED) == LVIS_SELECTED)
        {
            m_list.DeleteItem(i);
        }
    }
}

这样就实现了删除行的按钮,并且所有被选中的行都会被删除,按住Ctrl选中多行,点击删除,所有被选中的行都会被删除;

6. 实现列表控件的样式切换

切换到资源视图,单击Combo Box,打开属性->data;输入:

大图标;小图标;详细信息;列表;

如图:
这里写图片描述

继续编辑Combo Box的属性,选择“控件事件”,添加CBN_Selchange事件,如图:
这里写图片描述
编辑Combo Box的OnCbnSelchangeCombo2处理函数:

void Cday13Dlg::OnCbnSelchangeCombo2()
{
    // TODO: 在此添加控件通知处理程序代码
    DWORD dwStyle;
    CComboBox *pView;
    pView = (CComboBox *)GetDlgItem(IDC_COMBO2);
    switch(pView->GetCurSel())
    {
    case 0:
        dwStyle = LVS_ICON;
        break;
    case 1:
        dwStyle = LVS_SMALLICON;
        break;
    case 2:
        dwStyle = LVS_LIST;
        break;
    case 3:
        dwStyle = LVS_REPORT;
        break;
    default:
        return;
    }
    m_list.ModifyStyle(LVS_TYPEMASK,dwStyle);
}

很明显,先用GetDlgItem获取Combo Box的对象,然后判断Combo Box的选中的是哪一项,记录选中项的列表类型,最后设置列表属性;

最后效果图:

大图标:
这里写图片描述
小图标:
这里写图片描述

列表:
这里写图片描述
详细信息:
这里写图片描述

项目源码可以访问我的码云

>>>我的私人博客<<<

0
0
查看评论

MFC中的列表控件CListCtrl

在使用CListCtrl控件Report显示风格时,需要设置列标题信息,否则不能向控件中添加数据信息,编辑列标题需要使用InsertColumn方法:    m_ListCtrl.InsertColumn(0, "姓名", LVCFMT_LEFT, ...
  • hejianhua
  • hejianhua
  • 2007-12-31 15:46
  • 11346

MFC CLIstCtrl控件的高度设置

CListCtrl高度的设置 void CSkinListCtrl::SetItemHeight( int nHeight ) {       m_nHeightItem = nHeight;     ...
  • bojie5744
  • bojie5744
  • 2014-07-01 08:59
  • 707

【VS开发】MFC CListCtrl列表控件的消息响应

MFC里的CListCtrl选中一行,消息是哪个.实在想不起来了。找了一篇文章,比较有用: http://www.cnblogs.com/hongfei/archive/2012/12/25/2832806.html LVN_BEGINDRAG 鼠标左键正在被触发以便进行...
  • LG1259156776
  • LG1259156776
  • 2017-06-09 10:22
  • 489

VC MFC列表视图(CListCtrl)控件

列表视图控件 图标风格 CListCtrl类里要了解的函数 SetImageList为列表控件关联一个图像列表 InsertItem插入一项 GetSelectionMark获取选中项的索引 GetItemText根据项索引获取项文本内容 首先往工程里引入七个图标,接着在对话框里添加一...
  • ColdKevin
  • ColdKevin
  • 2011-12-27 00:08
  • 5767

使用MFC的CListCtrl的排序功能

CListCtrl控件的表头可以当作按钮来使用,当鼠标点击表头时,会向父窗口发送一个LNV_COLUMNCLICK消息,在重绘的CMyListCtrl类或者IDC_LIST控件中响应对应的LNV_COLUMNCLICK消息,就可以对列表进行排序了。 其函数使用方法见程序,其中SubItem为排序的...
  • zdhlwt2008
  • zdhlwt2008
  • 2016-01-05 10:45
  • 515

CListCtrl控件重绘源码---持续更新

多功能CListCtrl控件扩展: 下载源码请到以下地址:
  • dongdan_002
  • dongdan_002
  • 2014-12-12 16:42
  • 1542

VC中给列表控件CListCtrl添加复选框

目的:使列表框(CListCtrl)的每个项(item)前面有个复选,用来标明是否选中,提交数据是只选择选中的 方法:为列表框(CListCtrl)多加一个LVS_EX_CHECKBOXES风格 m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_...
  • zx249388847
  • zx249388847
  • 2016-05-15 23:06
  • 1882

完美自绘制CListCtrl控件[MFC]

自绘一个item我相信大部分人都在10分钟内能搞定 但是绘制非item部分的区域,同学们就傻眼了,不知道如何下手 CListCtrl的绘制机制在windows里做了一个优化,就是一个绘制循环通知过程 之所以不在OnPaint中画是考虑效率上的原因,好了我们看下这个绘制循环:   ...
  • hurryboylqs
  • hurryboylqs
  • 2010-09-02 15:48
  • 14670

MFC 子窗口初始化CListCtrl控件

在子窗口的类中重定义一个BOOL On
  • pk124729136
  • pk124729136
  • 2014-06-20 11:35
  • 2188

MFC CListCtrl控件隐藏滚动条但是保留用鼠标滚轮滚动效果的方法

重载以下两个消息 ON_WM_MOUSEWHEEL() ON_WM_NCCALCSIZE()在响应函数中void CSolidListCtrl::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp) { Sh...
  • sssaaaannnddd
  • sssaaaannnddd
  • 2017-12-21 15:28
  • 81
    个人资料
    • 访问:40787次
    • 积分:698
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:6篇
    • 译文:0篇
    • 评论:1条
    文章分类