CListCtrl学习笔记(1)---基础篇

转载 2012年03月23日 00:19:56

CListCtrl学习笔记(1)---基础篇

网络真是个好东西啊。转来学习学习。。。。。原文http://hi.baidu.com/herowuking/blog/item/fdcbadf426af7d68dcc47435.html#0

1.     基本风格设置

      (1)函数: ModifyStyle( )

      (2)重要参数:    LVS_ICON  // 大图标

                                  LVS_SMALLICON // 小图标

                                  LVS_LIST  // 列表

                                  LVS_REPORT  // 报表

   (3)说明:

用的比较多的是最后的报表视图.因为它可以有多列,正好代表数据库中的多个属性.所以下面的用法都是针对这种风格的.当然这些风格也可以在控件的属性中设置

(4) 注意

            我们知道在窗口各种各样的风格之间,有时是可以用” |”,表示属性叠加.如:

                          WS_CHILD | WS_VISIBLE;

但是上面的四种风格是不可能放在一起的.所以不要用到 “ |”操作符.

也正是因此,防止用户出错, 微软干脆把LVS_ICON, LVS_SMALLICON, LVS_LIST, LVS_REPORT这些都不设置成位标志,因此不能叠加.同时还设置了一个多余的掩码:

LVS_TYPEMASK.它是用来屏蔽的.

(5) 举例:

如果我们要判断一个CListCtrl的风格:

              DWORD dwStyle = m_listctrl.GetStyle( );

// 判断是否大图标样式

              If ( dwStyle & LVS_ICON )

                            …….

       这种写法是错误的.正确的写法涉及到掩码:

                     DWORD dwStyle = m_listctrl.GetStyle( ) & LVS_TYPEMASK;

                     If ( dwStyle = = LVS_ICON)

                     …….

       同理,我们在改变风格时,应该这样写:

                     ModifyStyle( LVS_TYPEMASK, LVS_ICON);

2.     扩展风格设置

   (1) 函数 SetExtendedStyle( )   GetExtendedStyle ( )

(2) 重要参数:

              LVS_EX_FULLROWSELECT //选中某行使整行高亮(只适用与报表风格)

              LVS_EX_GRIDLINES //网格线(只适用与报表风格)

              LVS_EX_CHECKBOXES //设置checkbox状态

(3)举例

                     DWORD dwStyle = GetExtendedStyle();

                   dwStyle |= LVS_EX_FULLROWSELECT;

                 dwStyle |= LVS_EX_GRIDLINES;

                 SetExtendedStyle(dwStyle);

3.其他风格设置:

函数: SetTextColor ( )  // 设置文字颜色

SetBkColor ( ) // 设置边框颜色

SetTextBkColor ( ) // 设置文字背景颜色

//下面直接举例说明

4.图标设置

可以给大图标风格和小图标风格设置图标:

HICON icon=AfxGetApp()->LoadIcon(IDI_ICON1);

m_icon.Add(icon);

m_listctrl.SetImageList(&m_icon,LVSIL_SMALL);//小图标

      m_listctrl.SetImageList(&m_icon,LVSIL_NORMAL)// 大图标

5插入一列

m_listctrl.InsertColumn(0,”哈哈”,LVCFMT_LEFT,80);

其中: 0是索引项,”哈哈”是列标题,LVCFMT_LEFT是显示方式(靠左),80表示列的宽

6插入一行

m_listctrl.InsertItem(0, “123”,0);// 插入为第一行第一列的内容,最后一个0是图标的索引

m_listctrl.SetItemText( 0,1, “123”) ; // 设置第一行第2列的内容

       m_ listctrl.SetItemText(0,2, “123”) ; // 设置第一行第3列的内容

7得到所有的行数

m_listctrl.GetItemCount( ) ;

8.得到所有的列数

m_listctrl.GetHeaderCtrl().GetItemCount( ) ;

9.得到被单击的项的行列号

void Cmylist::OnClick(NMHDR* pNMHDR, LRESULT* pResult) //单击消息

{

       

       NM_LISTVIEW *info=(NM_LISTVIEW*)pNMHDR;

       selectedIndex=info->iItem; // 行号

       selectedsub=info->iSubItem; // 列号

}     

(Cmylist为CListCtrl的派生类,以selectedIndex和selectedsub为接口,方便使用)        

10.得到被单击的列头索引号

void Cmylist::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult)

{

       NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

        selectedField=pNMListView->iSubItem;//列头号

}

同上,也是以selectedField为接口,方便用户调用

11.选中或者取消一行

plistctrl->SetItemState(index,LVIS_SELECTED,LVIS_SELECTED);//选中一行

plistctrl->SetItemState(index,0,LVIS_SELECTED);//取消一行

DWORD style=plistctrl->GetItemState(index,LVIS_SELECTED);//获得选中信息

12.获得被选中的多行

              POSITION p=m_listctrl.GetFirstSelectedItemPosition();// 得到第一次选中的位置

              while(p)

              {

                     int index=m_listctrl.GetNextSelectedItem(p);

                     

              }

13.删除一行或者一列

        m_listctrl.DeleteItem( index );

       m_listctrl.DeleteColumn(index);

14.删除多行或者多列

       注意要从后面开始删起,比如,如果我想删除第一行和第二行,应该:

              m_listctrl.DeleteItem(1);

              m_listctrl.DeleteItem(0);

       而不能:

              m_listctrl.DeleteItem(0);

m_listctrl.DeleteItem(1);

       因为每次删除一行或者一列,后面的索引号都要变化,所以从后面开始删除就没关系.

如果用for循环,应该递减:

       For(int k=m_listctrl.GetItemCount( );k>=-1;k++)

              m_listctrl.DeleteItem(k);

这就是删除所有行,当然也可以用CListCtrl::DeleteAllItems

15 根据索引号得到某一列的信息

                     HDITEM   hdi;   

                     TCHAR     lpBuffer[256];     

                     hdi.mask   =   HDI_TEXT;   

                     hdi.pszText   =   lpBuffer;   

                     hdi.cchTextMax   =   256;   

                     plistctrl->GetHeaderCtrl()->GetItem(index,   &hdi);

                     CString str=hdi.pszText;



CListCtrl学习笔记(2)---中级篇

专题1: 如何使CListCtrl完全可编辑? 1.       背景 : 我们知道如果CListCtrl是报表样式,那么CListCtrl所提供的编辑功能只局限于第一列.也就是说只有第一列可编辑....

CListCtrl学习笔记(2)---中级篇

CListCtrl学习笔记(2)---中级篇 专题1: 如何使CListCtrl完全可编辑? 1.       背景 : 我们知道如果CListCtrl是报表样式,那么CListCtrl所提供...

python基础学习笔记(1)

  • 2017年05月20日 15:30
  • 1.76MB
  • 下载

Android NDK学习笔记1-基础知识篇

Android NDK(Native Development Kit )是一套工具集合,允许你用像C/C++语言那样实现应用程序的一部分。同时,Android NDK对于Android SDK只是个组...

C++ Primer学习笔记1--c++基础篇查缺补漏

1.基础结构与编译 每个c++程序都有一个或多个函数,但是主函数main只有一个,任何语言的学习都会从一个HelloWorld开始,今天开始我们c++的HelloWorld #include ...

canvas学习笔记-1(基础篇)

canvas是什么? 1.html5的canvas元素使用javascript在网页上绘制图像; 2.画布是一个矩形区域,您可以控制它的每一个像素; 3.canvas拥有多种绘制路径、矩形、圆形、字符...

机器学习笔记之R语言基础篇3(概率分布1)

接下来我们介绍概率分布好了,接下来我们开始吧!—-正太分布—- 概率密度函数 dnorm density 累积概率函数 pnorm probility1.概率密度函数及累积概率函数简单回顾— ...

Android NDK学习笔记1-基础知识篇

引言     最近开发项目用到了多个C语言编写的动态链接库so,期间遇到很多问题,项目开发完毕后,我觉得有必要把开发中的一些知识点总结下来,并结合我手边的一本经典教程《Pro  Andro...
  • swaft
  • swaft
  • 2017年08月04日 17:55
  • 107

搜索引擎之阿堂Solr学习笔记系列1(基础篇:安装篇)

说起搜索引擎技术,阿堂在2012年的时候短暂地研究过Lucene技术,后面因为其它事情搁置了,就一直没有再去研究这搜索引擎技术了。去年10月份由于公司跨境电商平台考虑用搜索引擎技术,所以我又重新开始继...

Unity3D基础篇----Shader学习笔记(1)

这一篇中,我们对Unity中Shader中进行简单的实现,以及了解一些图形渲染的基本思路。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CListCtrl学习笔记(1)---基础篇
举报原因:
原因补充:

(最多只允许输入30个字)