VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 507|回复: 1

[分享] 让ListCtrl的列头支持多行显示

[复制链接]
51_avatar_middle
online_admins Syc 发表于 2018-3-19 11:48:25 | 显示全部楼层 |阅读模式
今天有位会员提了一个问题,关于如何让 ListCtrl控件 的列头 header 支持多行显示,如下图:
让ListCtrl的列头支持多行显示

我查了一下,默认情况下是不可以的,即使在 InsertColumn 的时候列头的标题中含有换行符 \n 也是不行的。于是想到了 codeproject 上面能不能有,于是到上面去搜索了一下,还真找到了。
转载地址:https://www.codeproject.com/Arti ... -Inside-a-CListCtrl

实现的界面如图:
让ListCtrl的列头支持多行显示

跟会员的要求基本一致。这里面拿过来分享给大家。

使用方法:
1、添加 HeaderCtrlExt.h 和 HeaderCtrlExt.cpp 文件到你的工程中;
2、在 CListView 或者 CListCtrl 的派生类中添加一个 CHeaderCtrlEx 类型的成员变量,以及 CFont 类型的成员变量;
3、如果使用的是 CListCtrl 的派生类,那么在 OnCreate 函数中添加如下代码:
  1. ///////////////////////SET UP THE MULTILINE HEADER CONTROL

  2. //m_NewHeaderFont is of type CFont
  3. m_NewHeaderFont.CreatePointFont(190,"MS Serif");

  4. CHeaderCtrl* pHeader = NULL;
  5. pHeader=GetHeaderCtrl();

  6. if(pHeader==NULL)
  7.         return;
  8.        
  9. VERIFY(m_HeaderCtrl.SubclassWindow(pHeader->m_hWnd));       

  10. //A BIGGER FONT MAKES THE CONTROL BIGGER
  11. m_HeaderCtrl.SetFont(&m_NewHeaderFont);

  12. HDITEM hdItem;
  13. hdItem.mask = HDI_FORMAT;

  14. for(i=0; i < m_HeaderCtrl.GetItemCount(); i++)
  15. {
  16.         m_HeaderCtrl.GetItem(i,&hdItem);
  17.         hdItem.fmt|= HDF_OWNERDRAW;
  18.         m_HeaderCtrl.SetItem(i,&hdItem);
  19. }
复制代码


如果使用的是 CListView 的派生类,那么在 OnInitialUpdate 函数中添加如下代码:
  1. ///////////////////////SET UP THE MULTILINE HEADER CONTROL
  2. //m_NewHeaderFont is of type CFont
  3. m_NewHeaderFont.CreatePointFont(190,"MS Serif");

  4. CListCtrl& ListCtrl = GetListCtrl();

  5. CHeaderCtrl* pHeader = NULL;
  6. pHeader=ListCtrl.GetHeaderCtrl();

  7. if(pHeader==NULL)
  8.         return;
  9.        
  10. VERIFY(m_HeaderCtrl.SubclassWindow(pHeader->m_hWnd));       

  11. //A BIGGER FONT MAKES THE CONTROL BIGGER
  12. m_HeaderCtrl.SetFont(&m_NewHeaderFont);

  13. HDITEM hdItem;

  14. hdItem.mask = HDI_FORMAT;

  15. for(i=0; i < m_HeaderCtrl.GetItemCount(); i++)
  16. {
  17.         m_HeaderCtrl.GetItem(i,&hdItem);
  18.         hdItem.fmt|= HDF_OWNERDRAW;
  19.                
  20.         m_HeaderCtrl.SetItem(i,&hdItem);
  21. }
复制代码


OK了,说道这里,基本上完结了。大家不妨试试!相关源码文件在附件中,回复后可见!

游客,如果您要查看本帖隐藏内容请回复




上一篇:解决VC6在Win7或Win10下调试无法结束进程的Bug
下一篇:请问MFC的属性页界面可以和CFormView类一样,显示在主框架的文档区吗?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

52_avatar_middle
在线会员 liumiao 发表于 2018-6-28 17:10:36 | 显示全部楼层
想学习一下

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-8-17 05:50

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表