天天看点

CListCtrl详解(转)

作为MFC中最常用的控件之一,CListCtrl功能的使用,修改及扩展是一个很深,很广泛的问题。在学习的过程中我尽量留下笔记,贴在这里和大家共享,欢迎大家挑错。

CListCtrl应用在作表格上最多,所以一般研究的功能都是Report view。

今天先说一下在Report下如何选中一行的一列。

CListCtrl一个很不好的默认表现就是只能选中一行,想选中其中一列,就得写不少程序。如果你遇到这个问题想找一个现成的解决方法,你可以下载下面的小程序包。

同时这个控件支持CheckBox。用户可以加入其它子定义的类,如按钮,位图。只需要写两三个函数就可以显示了。

CListCtrl详解(转)

点击下载该文件

效果大概如下图:

CListCtrl详解(转)

此主题相关图片如下:

CListCtrl详解(转)

这里选种的颜色是系统默认的颜色,你可以把他该成任何喜欢的颜色。

使用这个控件的方法很简单。把文件包中的ListReport.h,ListReport.cpp,ListItem和ListItem.cpp加到你的项目中,然后在你的Dialog或者FormView里加上想要用的List Control。在class wizard里给list control加控制变量,variable type里就会有CListCtrl和CListReport两个选后者,然后把List Control的Proprty中View设成Report,然后选Owner draw fixed。就可以了。

在你的主程序中用下面的方法调用: 假设变量名叫m_listDemo

CReportCtrl m_listDemo

在header中加一列:     m_listDemo.AddColumn("Column 0", 0);   //第一个参数是列的文字,第二个参数是列号。

在header中加一列,并指定其宽度为200:    m_listDemo.AddColumn("Column 0", 0, 200);

在第0行第0列加Text "Row 0, Col 000",红色字体,粗体字    

m_listDemo.AddItem(0, 0, "Row 0, Col 000", CListItemText::GenerateProperty(true, RGB(255,  0,  0)))

字太长的时候item会显示成...(如图)。

在第0行第1列加Text "Row 0, Col 100",绿色字体,非粗体字    

    m_listDemo.AddItem(0, 1, "Row 0, Col 100", CListItemText::GenerateProperty(false, RGB(0, 255,  0)));

在第0行第2列加Check Box,初始状态为选中。  

    m_listDemo.AddItem(0, 2, "1", CListItemCheckBox::GenerateProperty());

制作的原理大概就是在鼠标左键按下的时候记下鼠标的位置,重载DrawItem函数,根据鼠标位置决定文字的背景颜色。程序应该很好懂,有什么问题欢迎大家指正。

以后我会不断更新本文,增加其它CListCtrl的功能。