VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1923|回复: 12

[交流] 让ListCtrl的列头支持多行显示

[复制链接]
51_avatar_middle
online_admins 发表于 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
在线会员 发表于 2018-6-28 17:10:36 | 显示全部楼层
想学习一下
45_avatar_middle
在线会员 发表于 2018-8-22 17:09:27 | 显示全部楼层
顶一个~~~~~~~~~~~~~~~~
61_avatar_middle
在线会员 发表于 2018-9-17 22:48:51 | 显示全部楼层
回复就能看见吗
28_avatar_middle
在线会员 发表于 2018-11-10 21:02:05 | 显示全部楼层
测试用测试用测试用测试用
04_avatar_middle
在线会员 发表于 2018-11-29 17:47:22 | 显示全部楼层
学习学习学习学习学习学习
58_avatar_middle
在线会员 发表于 2018-12-5 16:29:57 | 显示全部楼层
谢谢分享~~
96_avatar_middle
在线会员 发表于 2019-3-13 16:07:13 | 显示全部楼层
看看看看看看看看看看看看看看看看看看看看看看看看
94_avatar_middle
在线会员 发表于 2019-4-11 17:12:18 | 显示全部楼层
想学习一下
69_avatar_middle
在线会员 发表于 2019-5-5 11:42:08 | 显示全部楼层
想学习一下
11_avatar_middle
在线会员 发表于 2019-5-25 20:49:05 | 显示全部楼层
用了,貌似没变化。。。。不知道问题出哪里了
35_avatar_middle
在线会员 发表于 2019-5-29 09:07:33 | 显示全部楼层

顶一个~~~~~~~~~~~~~~~~
73_avatar_middle
在线会员 发表于 2019-6-12 20:28:19 | 显示全部楼层
感谢分享~很需要
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

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

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

GMT+8, 2019-9-18 14:15

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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