`

改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景

    博客分类:
  • MFC
MFC 
阅读更多

改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景

作者:effortsboysZYB

下载源代码

摘要

  用CListCtrl来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色,或者需要改变一下行高和字体大小,CListCtrl要改变这些并不是很方便。本文将介绍如何派生一个类来改变CListCtrl及其表头的高度、字体大小、列背景颜色、单元格背景颜色、列字体颜色、单元格字体颜色。

关键字: 自绘 子类化 颜色 CListCtrl CHeaderCtrl

一、 实现过程

1.表头修改
  新建一个MFC类CHeaderCtrlCl,其基类为CHeaderCtrl,响应OnPaint消息实现自绘,实现代码请看源代码(由于代码较占篇幅,所以就不贴上来了,抱歉),在头文件中定义函数
LRESULT OnLayout( WPARAM wParam, LPARAM lParam ),之后手动添加消息响应ON_MESSAGE(HDM_LAYOUT, OnLayout),在消息响应中改变高度,实现代码如下:

LRESULT CHeaderCtrlCl::OnLayout( WPARAM wParam, LPARAM lParam )
{
	LRESULT lResult = CHeaderCtrl::DefWindowProc(HDM_LAYOUT, 0, lParam); 
	HD_LAYOUT &hdl = *( HD_LAYOUT * ) lParam; 
	RECT *prc = hdl.prc; 
	WINDOWPOS *pwpos = hdl.pwpos; 
	int nHeight = (int)(pwpos->cy * m_Height); //改变高度,m_Height为倍数
	pwpos->cy = nHeight; 
	prc->top = nHeight; 
	return lResult; 
}

2. 表的修改
  新建一个MFC类CListCtrlCl,其基类为CListCtrl,定义一个CHeaderCtrlCl的成员变量m_Header,重载PreSubclassWindow(),在函数中修改控件类型为自绘模式,然后子类化表头,代码如下:

void CListCtrlCl::PreSubclassWindow()
{
	// TODO: 在此添加专用代码和/或调用基类
	ModifyStyle(0,LVS_OWNERDRAWFIXED);
	CListCtrl::PreSubclassWindow();
	CHeaderCtrl *pHeader = GetHeaderCtrl();
	m_Header.SubclassWindow(pHeader->GetSafeHwnd());
}

添加成员变量,保存一些基本信息。

CPtrList m_ptrListCol;  //保存列颜色
CPtrList m_ptrListItem; //保存Item颜色表
CPtrList m_colTextColor; //保存列字体颜色
CPtrList m_ItemTextColor; //保存单元格字体颜色

重载DrawItem()实现自绘,实现代码请参照代码。 手动添加消息宏ON_WM_MEASUREITEM_REFLECT(),添加下面的函数,实现修改行高。

void CListCtrlCl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
	if (m_nRowHeight>0)
	{
		lpMeasureItemStruct->itemHeight = m_nRowHeight;
	}
}

添加消息处理OnMeasureItem()

void CListCtrlCl::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CListCtrl::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}

覆盖基类InsertColumn进行列信息保存

int CListCtrlCl::InsertColumn(int nCol, LPCTSTR lpszColumnHeading, 
			int nFormat /* = LVCFMT_LEFT */, 
			int nWidth /* = -1 */, 
			int nSubItem /* = -1 */)
{
	m_Header.m_HChar.Add(lpszColumnHeading);
	if (nFormat==LVCFMT_LEFT)
	{
		m_Header.m_Format = m_Header.m_Format + "0";
	}
	else if (nFormat==LVCFMT_CENTER)
	{
		m_Header.m_Format = m_Header.m_Format + "1";
	}
	else if (nFormat==LVCFMT_RIGHT)
	{
		m_Header.m_Format = m_Header.m_Format + "2";
	}
	else
	{
		m_Header.m_Format = m_Header.m_Format + "1";
	}
	return CListCtrl::InsertColumn(nCol,lpszColumnHeading,nFormat,nWidth,nSubItem);
}

二、运行效果图如下:

 

 

 

三、使用方法

  把HeaderCtrlCl.h, HeaderCtrlCl.cpp, ListCtrlCl.h, ListCtrlCl.cpp添加到你的工程中,在拖一个CListCtrl控件到对话框上,添加成员变量,然后在头文件中#include “ListCtrlCl.h”,把刚添加的成员变量类型改为 CListCtrlCl ,在对话框的OnInitDialog()中添加初始化代码:

m_ListCtrl.SetColColor(0,RGB(10,150,20)); //设置列背景色
m_ListCtrl.SetColColor(2,RGB(30,100,90)); //设置列背景色
m_ListCtrl.SetBkColor(RGB(50,10,10));        //设置背景色
m_ListCtrl.SetItemColor(1,1,RGB(100,100,10)); //设置指定单元背景色
m_ListCtrl.SetRowHeigt(25);               //设置行高度
m_ListCtrl.SetHeaderHeight(1.5);          //设置头部高度
m_ListCtrl.SetHeaderFontHW(16,0);   //设置头部字体高度,和宽度,0表示缺省,自适应 
m_ListCtrl.SetHeaderTextColor(RGB(255,200,100)); //设置头部字体颜色
m_ListCtrl.SetTextColor(RGB(0,255,255));  //设置文本颜色
m_ListCtrl.SetHeaderBKColor(100,255,100,8); //设置头部背景色
m_ListCtrl.SetFontHW(15,0);               //设置字体高度,和宽度,0表示缺省宽度
m_ListCtrl.SetColTextColor(2,RGB(255,255,100)); //设置列文本颜色
m_ListCtrl.SetItemTextColor(3,1,RGB(255,0,0));  //设置单元格字体颜色
分享到:
评论

相关推荐

    【最新】MFC, CListCtrl 自定义字体、颜色和背景

    总结来说,自定义MFC的CListCtrl涉及到字体、颜色和背景的设置,以及对CHeaderCtrl的控制。这需要对MFC的消息机制、GDI绘图以及数据绑定有深入理解。通过熟练掌握这些技巧,开发者能够创建出功能强大且视觉效果出色...

    改变 CListCtrl高度、字体、颜色和背景的实例

    本实例将详细介绍如何利用重用类改变CListCtrl的高度、字体、颜色以及背景,以实现自定义的界面效果。我们将主要探讨以下几个方面: 1. **CListCtrl的基本操作**: - CListCtrl是MFC中的一个视图类,它继承自CWnd...

    CListCtrl控件背景颜色网格色彩

    本文将介绍如何派生一个类来改变CListCtrl及其表头的高度、字体大小、列背景颜色、单元格背景颜色、列字体颜色、单元格字体颜色。 通过改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景,重载函数实现!

    改变CListCtrlCHeaderCtrl高度字体颜色和背景增强版

    在这个"改变CListCtrlCHeaderCtrl高度字体颜色和背景增强版"的主题中,我们将探讨如何自定义这些控件的视觉样式,包括调整列头的高度、修改字体颜色以及改变背景颜色,从而提升用户界面的美观性和可用性。...

    一个扩展的CListCtrl类支持修改背景颜色以及字体颜色

    1. 设置默认背景颜色,默认字体颜色,默认选中字体颜色,默认选中背景颜色(四种颜色) 2. 设置特定单元格的四种颜色,当插入删除行或列时,特定单元格的颜色不变。 3. 设置默认字体(所有单元格字体一致) 4. 绘制...

    VC 改变CListCtrlCHeaderCtrl高度字体颜色和背景增强版.rar

    你提供的"改变CListCtrlCHeaderCtrl高度字体颜色和背景增强版.rar"文件可能包含了一个完整的示例工程,包含了以上讨论的所有代码和设置,可以帮助你更直观地理解和应用这些技术。 总的来说,通过自定义`CListCtrl`...

    设置CListCtrl单元格颜色和背景色VC++6.0

    在VC++6.0开发环境中,使用MFC(Microsoft Foundation Classes)库时,我们经常会遇到需要自定义控件样式的情况,比如改变CListCtrl控件的单元格颜色和背景色。CListCtrl是MFC中用于创建类似Windows资源管理器列表...

    可变ClistCtrl表头高度颜色的类

    在Windows编程中,CListCtrl是MFC(Microsoft Foundation Classes)库...在"改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景"的文件中,应该包含了实现这些功能的源代码示例,可以参考学习并应用于自己的项目中。

    mfc 中列表控件头的设置(背景颜色,字体大小等)

    在Windows应用程序开发中,有时我们需要自定义列表控件的外观,如改变头(header)的背景颜色、字体大小等,以满足用户界面的个性化需求。在标题提到的问题中,我们关注的是如何正确且无内存泄露地实现这些设置。 ...

    ListCtrl字体、颜色

    为了改变表头的颜色,你需要重写`OnDrawHeader`消息处理函数,使用`CHeaderCtrl`类来获取表头的设备上下文,然后绘制表头的背景和文字。 以下是一个简单的例子: ```cpp void CMyListCtrl::OnDrawHeader(CDC* pDC,...

    Change-CHeaderCtrl-Height_Font_Color.zip_Change_CheaderCtrl

    一种方法是通过重绘控件来改变背景色和字体颜色。你可以处理`WM_PAINT`消息并使用`CBrush`和`CDC`对象填充背景,用`SetTextColor`和`SetBkColor`设置字体颜色。例如: ```cpp void CYourClass::OnPaint() { ...

    CListCtrl样式自定义

    本话题将深入探讨如何自定义 `CListCtrl` 的样式,包括高度、字体、颜色以及背景,同时也会涉及 `CHeaderCtrl` 的定制,它是用来显示 `CListCtrl` 列标题的控件。 首先,自定义 `CListCtrl` 的高度涉及到修改控件的...

    VC CListCtrlt列表控件特效

    要改变CListCtrl及其表头的高度,我们需要在派生类中重写OnSize()函数,根据新的窗口尺寸调整列宽和表头高度。表头的高度可以通过调用CHeaderCtrl的SetItemHeight()函数来设置。CHeaderCtrl是CListCtrl的一部分,...

    自绘CListCtrl 的HeaderCtrl

    今天参考http://www.vckbase.com/document/viewdoc/?id=1855 关于改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景的代码。想实现一个改变Header的表头颜色的类, 自己手工根据提示Copy了主要代码如下: 但是在...

    自绘listctrl

    这可能涉及到列头的字体、颜色、背景的改变,以及自定义鼠标事件处理。 5. **自定义绘制过程**: - 使用CDC类(设备上下文)进行绘图操作,包括使用`TextOut`、`Rectangle`、`FillSolidRect`等函数绘制文本、矩形...

    VC资料代码示例

    2014/10/23 16:15 34,508 MFC改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景.rar 2008/01/21 12:39 29,999 mydll.rar 2005/01/29 18:56 53,722 pconline_vc_txt.zip 2014/11/11 19:57 0 readme.txt 2007/12/18...

Global site tag (gtag.js) - Google Analytics