WEB开发网
开发学院软件开发VC 修改一个完全颜色的CListCtrl类 阅读

修改一个完全颜色的CListCtrl类

 2007-11-01 20:24:25 来源:WEB开发网   
核心提示:在使用CListCtrl控件的过程中,我们会发现使用及其不方便,修改一个完全颜色的CListCtrl类,特别是在使用“report"显示模式时, 想给指定条目添加背景颜色,我体会到了随意添加条目颜色的乐趣,但同时也发现它存在的一些不足之处,CListCtrl控件所提供的设置颜色函数只能使得控件的界

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

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

怎样使用CColorListCtrl类:

1、把下面的文件加入你的工程中去:

color.h
color.cpp
ColorListCtrl.h
ColorListCtrl.cpp

2、在对话框头文件中加入ColorListCtrl.h的说明,然后用CColorListCtrl代替CListCtrl声明成员变量。

3、具体的使用方法,请看示例代码中的ColoredListCtrlDlg.cpp文件。

CColorListCtrl类存在的不足:

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

// Author: SFr frydaysoft@gmx.de
#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 25
extern ColorList colList[COLLIST_MAX];
COLORREF GetColorRef(ITEM_COLOR lParam);
#endif
color.cpp源代码如下所示:
// Author: SFr frydaysoft@gmx.de
#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: return RGB(128,128,128);break; //dark-gray
   case LIGHTGRAY: return RGB(192,192,192);break; //light-gray
   case LIGHTBLUE: return RGB(166,202,240);break; //light-blue
   case DARKWHITE: return RGB(255,251,240);break; //dark-white
   case MIDDLEGRAY: return RGB(160,160,164);break; //middle-gray
   default: return RGB(0,128,0); break; //dark-green
   }
}

1 2 3  下一页

Tags:修改 一个 完全

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接