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

VC++
面试题目:猫吃老鼠问题的求解
一个最基本的有限元计算程序
简单的表达式求值
C程序移植到VC开发环境下
一个小语言的词法分析程序
A/B 向上取整的方法
马走日棋盘算法
一种随机抽题的简单算法
clone模式在平衡排序二叉树实现中的应用
递归的应用 -- 最简单分形图形实现
比较数据排序前后的查找次数
根据前序和中序序列生成二叉树
如何用CZip/CUnzip类压缩/解压缩文件
使用 random_shuffle() 算法随机化序列元素
Ceb解除打印屏蔽实战
基于SHA-256的HMAC文件校验器
模拟信息加密流程图简介
关于数据校验
浅谈利用RSA算法防止非法注册机的制作
加密它:用新的高级加密标准(AES)保持你的数据安全

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 167 ::
收藏到网摘: 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: