改变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);
}

时间: 2024-12-31 12:48:58

改变CListCtrl、CHeaderCtrl高度、字体、颜色和背景的相关文章

android webview-android的webview怎么修改网页字体颜色和背景

问题描述 android的webview怎么修改网页字体颜色和背景 webview怎么把网页背景改为透明?或者说怎么改变网页背景色.直接改webview背景没用 解决方案 android使用selector修改TextView中的字体颜色和背景颜色zend stdio修改背景颜色以及字体Android 自定义 spinner (背景.字体颜色) 解决方案二: android:background="@null" 这里设置不行吗 解决方案三: webView.setBackgroundC

objective-c-ios uitextview 输入时 能否改变部分内容的字体颜色

问题描述 ios uitextview 输入时 能否改变部分内容的字体颜色 如题 也就是在textViewDidChange这个时候 边输入 也可以改变部分内容的颜色 比如当我连续输入两个aa就变成红色 解决方案 http://www.cocoachina.com/bbs/read.php?tid=48235 解决方案二: 可以研究下使用attributedstring实现 解决方案三: attributedstring可以 还有一种方法比较low 你可以textview上面贴个label,在l

listview改变选中行的字体颜色实例介绍_Android

目标:选中item,其字体设置为#3197FF,未选中的,其字体为#FFFFFF 与listvew设置选中行item背景图片一样,使用selector,不过这里的颜色设置,应该是在listview中的textview中设置. 复制代码 代码如下: <SPAN style="COLOR: #666666"><?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns

listview改变选中行的字体颜色实例介绍

目标:选中item,其字体设置为#3197FF,未选中的,其字体为#FFFFFF 与listvew设置选中行item背景图片一样,使用selector,不过这里的颜色设置,应该是在listview中的textview中设置. 复制代码 代码如下: <SPAN style="COLOR: #666666"><?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns

DBGrid简单自绘(字体颜色、背景等)

void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) { AnsiString name= Column->Field->DataSet->FieldByName("NAME")->AsString; if(name=="功能科室&q

TextView法改变字体颜色

问题描述 TextView法改变字体颜色 用TabLayout+ViewPager,实现了导航,pager使用了两个Fragment.在Fragment实现布局的时候添加了多个TextView,在预览状态可以看到字体颜色的修改是成功的,但是当程序运行起来后发现,页面无任何文字.然后给TextView添加背景色,运行发现字体颜色是白色的,之前因为背景也是白色,没显示出来,之后有尝试修改,发现无论怎么修改都**无法改变字体颜色,只能为白色**. 最后发现,在代码中可以设置文字的颜色,但是这样的话很不

fragmentactivity-为什么没有法改变TextView的字体颜色?

问题描述 为什么没有法改变TextView的字体颜色? package com.like.duoroulianmeng; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.ap

Android中颜色选择器和改变字体颜色的实例教程_Android

1.构建一张七彩图: 我们经常看到这种样子的颜色选择器吧.. 然后其实右边的亮度选择是: 这样我们的代码就可以进行啦...   // 创建七彩图片 private void init() { int[] oc = { 0xffff0000, 0xffffff00, 0xff00ff00, 0xff00ffff, 0xff0000ff, 0xffff00ff, 0xffff0000 }; float[] op = { 0, 0.16667f, 0.33333f, 0.5f, 0.66667f, 0

JavaScript实现更改网页背景与字体颜色的方法_javascript技巧

本文实例讲述了JavaScript实现更改网页背景与字体颜色的方法.分享给大家供大家参考.具体分析如下: JavaScript,通过点击按钮更改网页背景与字体的颜色,网页中有N个改变颜色的按钮,点击不同的按钮,网页的字体与背景就会改变成不同的颜色.很简单的JavaScript小程序. 一.基本目标 一打开网页首先提示问候信息"你好" 网页中有N个改变颜色的按钮,其中返回是返回网页的默认颜色,背景是白的,字体是黑的 点击不同的按钮,网页的字体与背景就会改变成不同的颜色. 本来想做出彩虹起