当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 修改一个完全颜色的CListCtrl类

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 修改一个完全颜色的CListCtrl类


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 176 ::
收藏到网摘: n/a

修改一个完全颜色的CListCtrl类

作者:lypindream

下载源代码

  在使用CListCtrl控件的过程中,我们会发现使用及其不方便,特别是在使用“report"显示模式时, 想给指定条目添加背景颜色,CListCtrl控件所提供的设置颜色函数只能使得控件的界面变得好看一些,根本不能满足我们的要求,我们无法把特定的一项或几项添加上不同的颜色以示区别。 幸运的是很多VC的使用者在改造CListCtrl类,使之更加功能强大上做了很多工作,开发出了各种各样的继承类来实现这个功能,Sven Freitag 就是其中的一员。他开发出了CListCtrl的继承类CColorListCtrl来实现给指定的条目加背景色的功能,并无偿的在网上公布给VC的使用者,我在源代码中收集了他的源程序,各位读者可以先阅读学习一下。

CColorListCtrl类示例代码运行效果如下图所示:




怎样使用CColorListCtrl类:
1、把下面的文件加入你的工程中去:

color.hcolor.cppColorListCtrl.hColorListCtrl.cpp

2、在对话框头文件中加入ColorListCtrl.h的说明,然后用CColorListCtrl代替CListCtrl声明成员变量。
3、具体的使用方法,请看示例代码中的ColoredListCtrlDlg.cpp文件。

CColorListCtrl类存在的不足:

  在使用CColorListCtrl类的过程中,我体会到了随意添加条目颜色的乐趣,但同时也发现它存在的一些不足之处。下面我列出color.h和color.cpp文件代码来进行分析。color.h源代码如下所示:

// Author: SFr [email protected]#ifndef AFX_COLOR_H__9FC7D36B_FC88_42FD_8DAA_2F70016038BA__INCLUDED_#define AFX_COLOR_H__9FC7D36B_FC88_42FD_8DAA_2F70016038BA__INCLUDED_#include "windows.h"typedef enum {	DEF_BACKGROUND=0, DEF_TEXT, DEF_SELBACKGROUND, DEF_SELTEXT, DEF_DESELBACKGROUND, DEF_DESELTEXT,	BLACK,BLUE,GREEN,CYAN,RED,	MANGENTA,YELLOW,WHITE,DARKBLUE,DARKGREEN,	BLUEGREEN,BROWN,PURPUR,OLIV,DARKGRAY,	LIGHTGRAY,LIGHTBLUE,DARKWHITE,MIDDLEGRAY}ITEM_COLOR;typedef struct {	char str[50];	ITEM_COLOR col;}ColorList;#define COLLIST_MAX 25extern ColorList colList[COLLIST_MAX];COLORREF GetColorRef(ITEM_COLOR lParam);#endifcolor.cpp源代码如下所示:// Author: SFr [email protected]#include "stdafx.h"#include "color.h"ColorList colList[COLLIST_MAX]={	{"DEF_BACKGROUND",DEF_BACKGROUND},	{"DEF_TEXT",DEF_TEXT},	{"DEF_SELBACKGROUND",DEF_SELBACKGROUND},	{"DEF_SELTEXT",DEF_SELTEXT},	{"DEF_DESELBACKGROUND",DEF_DESELBACKGROUND},	{"DEF_DESELTEXT",DEF_DESELTEXT},	{"BLACK",BLACK},	{"BLUE",BLUE},	{"GREEN",GREEN},	{"CYAN",CYAN},	{"RED",RED},	{"MANGENTA",MANGENTA},	{"YELLOW",YELLOW},	{"WHITE",WHITE},	{"DARKBLUE",DARKBLUE},	{"DARKGREEN",DARKGREEN},	{"BLUEGREEN",BLUEGREEN},	{"BROWN",BROWN},	{"PURPUR",PURPUR},	{"OLIV",OLIV},	{"DARKGRAY",DARKGRAY},	{"LIGHTGRAY",LIGHTGRAY},	{"LIGHTBLUE",LIGHTBLUE},	{"DARKWHITE",DARKWHITE},	{"MIDDLEGRAY",MIDDLEGRAY}};COLORREF GetColorRef(ITEM_COLOR lParam) {	switch (lParam)	{	case DEF_BACKGROUND: return ::GetSysColor(COLOR_WINDOW); break;	case DEF_TEXT: return ::GetSysColor(COLOR_WINDOWTEXT); break;	case DEF_SELBACKGROUND: return ::GetSysColor(COLOR_ACTIVECAPTION); break;	case DEF_SELTEXT: return ::GetSysColor(COLOR_HIGHLIGHTTEXT); break;	case DEF_DESELBACKGROUND: return ::GetSysColor(COLOR_INACTIVECAPTION); break;	case DEF_DESELTEXT: return ::GetSysColor(COLOR_INACTIVECAPTIONTEXT ); break;	case BLACK: return RGB(0,0,0); break; //black	case BLUE: return RGB(0,0,255); break; //blue	case GREEN: return RGB(0,255,0); break; //green	case CYAN: return RGB(0,255,255); break; //cyan	case RED: return RGB(255,0,0); break; //red	case MANGENTA: return RGB(255,0,255); break; //mangenta	case YELLOW: return RGB(255,255,0); break; //yellow	case WHITE: return RGB(255,255,255);break; //white	case DARKBLUE: return RGB(0,0,128); break; //dark-blue	case DARKGREEN: return RGB(0,128,0); break; //dark-green	case BLUEGREEN: return RGB(0,128,128); break; //blue-green	case BROWN: return RGB(128,0,0); break; //brown	case PURPUR: return RGB(128,0,128); break; //purpur	case OLIV: return RGB(128,128,0); break; //oliv	case DARKGRAY: