为listctrl控件换带背景表头

原创 2012年03月29日 12:04:47

1.       列表头控件时由列头和表格两部分构成,其中列头被定义为CHeaderCtrl类。只要重绘CHeaderCtrl类。首先创建一个CCustomHeader,其父类为CHeaderCtrl

2.       CCustomHeader类中处理WM_PAINT消息,在WM_PAINT消息处理函数中将位图绘制在控件上,然后获取当前列的数量,利用循环绘制每一列的标题

void CCustomHeader::OnPaint()

{

       CPaintDC dc(this);               //获取控件设备上下文

      

       int ItemCount = GetItemCount();         //获取列数

       CRect cRC;

       GetClientRect(&cRC);

 

       CBrush brush;               //定义画刷对象

       CBitmap bmp;                    

       bmp.LoadBitmap(IDB_H);   //加载位图

       brush.CreatePatternBrush(&bmp);        //创建位图画刷

       dc.FillRect(cRC,&brush);                    //利用位图画刷填充客户区域

 

       CPen pen(PS_SOLID,2,RGB(128,128,128));             //定义画笔对象

 

       for (int i = 0 ; i <ItemCount; i++)                                    //循环访问每一列

       {

              CRect rc;                                                         //定义一个区域对象

              GetItemRect(i,rc);                                            //获取列客户区域

 

              rc.DeflateRect(0,0,1,0);                                    //选中画笔对象

 

       //绘制分隔条

              dc.SelectObject(&pen);                                            //选中画笔对象

              dc.MoveTo(rc.right+1,0);                                         //绘制分隔条的起点

              dc.LineTo(rc.right+1,rc.Height());                             //绘制列之间的分割条

       //绘制文本

              char text[100];                                                        //定义一个字符数组,存储列标题

              memset(text,0,100);                                   //初始化字符数组

              CListCtrl* pList =  (CListCtrl*)this->GetParent();                   //获取列表控件

              if (pList != NULL)                                                  //判断列表是否为空

              {

                                  

                     LVCOLUMN col;                                             //定义一个列信息对象

                     memset(&col,0,sizeof(LVCOLUMN));               //初始化列信息对象

                     col.mask = LVCF_TEXT;                                  //设置文本标记

                     col.cchTextMax  = 100;                                   //设置最大文本长度

      

                     col.pszText = text;                                                   //设置文本缓冲区

                     pList->GetColumn(i,&col);                                      //获取列表列信息

                     dc.SetTextColor(RGB(255,150,0));                           //设置列表题颜色

 

                     CFont* font = GetFont();                                         //获取字体对象

                     dc.SelectObject(font);                                              //选中字体对象

                     dc.SetBkMode(TRANSPARENT);

                     dc.DrawText(text,rc,DT_CENTER      |DT_VCENTER|DT_WORD_ELLIPSIS|DT_SINGLELINE);   //绘制文本

              }

       }

       pen.DeleteObject();                                   //删除画笔对象

       bmp.DeleteObject();

       brush.DeleteObject();

}

 

然后可以创建一个自定义的类,其父类为CListCtrl,在自定义的类中添加一个成员变量m_Header.              CCustomHeader m_Header;

改写自定义类的PreSubClassWindow()虚方法,子类化列头

void CTipListCtrl::PreSubclassWindow()

{

       // TODO: Add your specialized code here and/or call the base class

       m_Header.SubclassWindow(GetHeaderCtrl()->m_hWnd);

       CListCtrl::PreSubclassWindow();

}

相关文章推荐

设置ListCtrl列表控件其中某一行的字体和背景颜色

设置ListCtrl列表控件其中某一行的字体和背景颜色,可以最终达到如下效果: 操作步骤如下所示: 1.先添加一个自定义消息 ON_NOTIFY ( NM_CUSTOMDRAW,IDC_V_H2...

动态改变listctrl 单元格背景及文字颜色(非重写控件)

CListCtrl 类里面没有直接改变单元格背景及文字颜色的成员函数,只有改变整个背景的颜色。我有时候只是需要把某个单元格的颜色改变来突出显示就可以了: 我们可以通过重载ListCtrl控件的C...

listCtrl控件的使用

  • 2012年04月16日 19:15
  • 424KB
  • 下载

MFC控件:listctrl使用方法总结

作者:lixiaosan 时间:04/06/2006 以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SD...
  • Ccode11
  • Ccode11
  • 2014年08月07日 11:24
  • 490

ListCtrl控件排序类及演示程序

  • 2010年04月07日 22:28
  • 55KB
  • 下载

可编辑ListCtrl控件

  • 2016年01月20日 09:39
  • 70KB
  • 下载

VC ++ MFC编程--ListCtrl控件的用法

ListCtrl在工作中,常常用到,也常常看到大家发帖问怎么用这个控件,故总结了一下自己的使用经验,以供参考使用。 先注明一下,这里,我们用m_listctrl来表示一个CListCtrl的类对象,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为listctrl控件换带背景表头
举报原因:
原因补充:

(最多只允许输入30个字)