修改一个完全颜色的CListCtrl类
2007-11-01 20:24:25 来源:WEB开发网4、在类CColorListCtrl的定义和函数说明中进行如下修改: 源代码:
BOOL SetItemTextColor(ITEM_COLOR color, int Index, int iSub);
BOOL SetItemBackgndColor(ITEM_COLOR color, int Index, int iSub);
BOOL CColorListCtrl::SetItemBackgndColor(ITEM_COLOR color, int Index, int iSub)
BOOL CColorListCtrl::SetItemTextColor(ITEM_COLOR color, int Index, int iSub)
修改后的代码:
BOOL SetItemTextColor(COLORREF color, int Index, int iSub);
BOOL SetItemBackgndColor(COLORREF color, int Index, int iSub);
BOOL CColorListCtrl::SetItemBackgndColor(COLORREF color, int Index, int iSub)
BOOL CColorListCtrl::SetItemTextColor(COLORREF color, int Index, int iSub)
删除的源代码:
// only for TEST
if (ret_index<3)
{
p->SetBackColor(ITEM_COLOR(ret_index+BLUE),0);
p->SetTextColor(ITEM_COLOR(ret_index+RED ),0);
}
else
if (ret_index<=6)
{
p->SetBackColor(ITEM_COLOR(ret_index+BLUE),1);
p->SetTextColor(ITEM_COLOR(ret_index+RED ),1);
}
else
{
p->SetBackColor(ITEM_COLOR((ret_index+BLUE)&0xF),2);
p->SetTextColor(ITEM_COLOR((ret_index+RED )&0xF),2);
}
// end: only for TEST
5、替换如下所示的代码:
DEF_BACKGROUND替换成::GetSysColor(COLOR_WINDOW);
DEF_TEXT替换成::GetSysColor(COLOR_WINDOWTEXT);
GetColorRef(DEF_DESELTEXT)替换成::GetSysColor(COLOR_HIGHLIGHTTEXT);
GetColorRef(DEF_SELBACKGROUND)替换成::GetSysColor(COLOR_ACTIVECAPTION);
GetColorRef(DEF_SELTEXT)替换成::GetSysColor(COLOR_HIGHLIGHTTEXT);
GetColorRef(DEF_DESELBACKGROUND)替换成::GetSysColor(COLOR_INACTIVECAPTION);
pDC->SetTextColor(pMyLParam->GetTextColor(DEF_DESELTEXT))替换成pDC->SetTextColor(pMyLParam->GetTextColor(5));
修改后的示例程序如下图所示,基本功能与原来的程序一样。
本来我还计划把对CListCtrl类的排序功能加入其中,可是到实现的时候才发现异常复杂,因为在CListCtrl控件的“More Style”属性中已选中“Owner draw fixed”选项,对CListCtrl控件颜色的修改实际上是通过自画来实现的,导致了CListCtrl控件某些函数的不可使用,例如InsertItem()等等,我尝试做了一下排序,总是会出现一些无法理解的错误,照我的理解只能把项全部存进列表中,然后对列表进行排序,再清空CListCtrl控件的所有项罗列出已排序的项。如果哪位高手有独到的解决方法,请不吝指教!
更多精彩
赞助商链接