作为MFC中最常用的控件之一,CListCtrl功能的使用,修改及扩展是一个很深,很广泛的问题。在学习的过程中我尽量留下笔记,贴在这里和大家共享,欢迎大家挑错。
CListCtrl应用在作表格上最多,所以一般研究的功能都是Report view。
今天先说一下在Report下如何选中一行的一列。
CListCtrl一个很不好的默认表现就是只能选中一行,想选中其中一列,就得写不少程序。如果你遇到这个问题想找一个现成的解决方法,你可以下载下面的小程序包。
同时这个控件支持CheckBox。用户可以加入其它子定义的类,如按钮,位图。只需要写两三个函数就可以显示了。
点击下载该文件
效果大概如下图:
此主题相关图片如下:
这里选种的颜色是系统默认的颜色,你可以把他该成任何喜欢的颜色。
使用这个控件的方法很简单。把文件包中的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的功能。
CListCtrl应用在作表格上最多,所以一般研究的功能都是Report view。
今天先说一下在Report下如何选中一行的一列。
CListCtrl一个很不好的默认表现就是只能选中一行,想选中其中一列,就得写不少程序。如果你遇到这个问题想找一个现成的解决方法,你可以下载下面的小程序包。
同时这个控件支持CheckBox。用户可以加入其它子定义的类,如按钮,位图。只需要写两三个函数就可以显示了。
点击下载该文件
效果大概如下图:
此主题相关图片如下:
这里选种的颜色是系统默认的颜色,你可以把他该成任何喜欢的颜色。
使用这个控件的方法很简单。把文件包中的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的功能。