CListCtrl修改行高

Win32 SDK Gui编程系列之--ListView自绘OwnerDraw(续) 程序的行数与标准的列表视图几乎相同。在标准列表视图中,最左边的列只能使用左对齐(DT_LEFT),但在下面的程序中设置为居中对齐(DT_CENTER)。在Windows 7中,例如,按钮控件可以采用视觉样式的外观,但列表视图控件的列头仍然是如下所示的三维按钮,无法实现扁平化的视觉样式。在上述程序中,通过回调函数以如下方式实现,当数字位数较小时,在前面添加空格,从而实现了类似居中对齐的效果。2、视觉样式列表视图的程序详细信息 在按钮控件的情况下,没有添加或修改程序,但对于列表视图,添加了以下红色标出的一行。 阅读详情

 

网上修改CListCtrl项高度的方法一般是扩大字体,及用图片将项高度撑 大.

这两种方法虽然简单,但是效果却不是很理想.一种比较理想的方法是自画CListCtrl,不过方法相对来说比较复杂.

要修改CListCtrl的列表项高度,我们需要自己添加 MeasureItem 的消息响应函数,对应的消息是 WM_MEASUREITEM+WM_REFLECT_BASE, 而不是 WM_MEASUREITEM.在CListBox里我们可以直接在 ClassWizard 里将此消息响应添加进 class 里,但是 CListCtrl 默认是没有这个消息响应的,我们需要手动添加它(注意,这里不是 WM_MEASUREITEM. CListCtrl 仅有 WM_MEASUREITEM, 对应的函数为 OnMeasureItem).

为了响应这个消息,我们还需要给列表加上 LVS_OWNERDRAWFIXED 风格.可以在 Create 列表的时候添加,也可以在 PreCreateWindow 虚函数中添加.

添加 MeasureItem 消息响应函数,首先我们需要在类的头文件中添加:

afx_msg void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

来声明此消息响应函数;

然后在cpp的消息响应宏中添加:

ON_WM_MEASUREITEM_REFLECT()

最后自己建立 MeasureItem 的函数定义:

///////////////////////////////////////////////////////////////////////////// 
// CListEx message handlers

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

其中 m_nItemHeight 是我在头文件中声明的一个成员变量,用于从外部修改列表项高度.

然后我们添加一个方法,便于从外部直接修改列表项高度:

//设置行高 
void SetItemHeight(UINT nHeight);

然后是该方法的定义:

//设置行高 ,在对话框初始化后,绘制了LIST后,设置高度即可 
void CListEx::SetItemHeight(UINT nHeight) 
{ 
     m_nItemHeight = nHeight;

     CRect rcWin; 
     GetWindowRect(&rcWin); 
     WINDOWPOS wp; 
     wp.hwnd = m_hWnd; 
     wp.cx = rcWin.Width(); 
     wp.cy = rcWin.Height(); 
     wp.flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER;

     SendMessage(WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp); 
}

这个方法的最后,使用了 SendMessage 发送 WM_WINDOWPOSCHANGED 消息让 CListCtrl 进入 MeasureItem 的消息响应函数,对列表高度进行修改.

因为我们这里使用了列表的自绘风格,因此列表项需要自己绘制.

首先在类的声明中添加 DrawItem 虚函数声明:

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

然后自画 CListCtrl:

void CListEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)  //重载
{ 
     int     nItem = lpDrawItemStruct->itemID; 
     CDC*    pDC    = CDC::FromHandle(lpDrawItemStruct->hDC);

     ......

     CRect    rcBound, rcLabel, rcIcon; 
     //获得列表项图标,标签,及项的区域 
     GetItemRect ( nItem, rcIcon, LVIR_ICON ); 
     GetItemRect ( nItem, rcLabel, LVIR_LABEL ); 
     GetItemRect ( nItem, rcBound, LVIR_BOUNDS );

     ......

}

现在这个 CListCtrl 的重载类就支持自定义列表项高度了.

 

 

注:有些解决方案,添加了ON_WM_MEASUREITEM消息处理函数为:

      CXListCtrl::OnMeasureItem(int nIDCtrl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)

      {

//TODO:

CListCtrl::OnMeasureItem(nIDCtrl,  lpMeasureItemStruct);

 

      }

clistCtrl 自绘 设置行高 行宽 网上修改CListCtrl项高度的方法一般是扩大字体,及用图片将项高度撑大. 这两种方法虽然简单,但是效果却不是很理想.一种比较理想的方法是自画CListCtrl,不过方法相对来说比较复杂. 要修改CListCtrl的列表项高度,我们首先设置样式 LVS_OWNERDRAWFIXED ,添加 MeasureItem 的消息响应函数,对应的消息是 WM_MEASUREITEM+WM_REFLEC 阅读详情

相关推荐

CListCtrl设置行高

CListCtrl设置行高 CListCtrl设置行高 CListCtrl 设置行高 行距 高度

CListCtrl 修改行高

最近自己在做一个小项目,需要重绘CListCtrl;这里和大家分享修改行高的方法。总的来说修改行高有两种方法(目前我知道的),一是利用响应ON_WM_MEASUREITEM_REFLECT消息来修改行高,一是利用item内的内容来撑大行高;   一、利用ON_WM_MEASUREITEM_REFLECT来修改行高           1、首先我们对ON_WM_MEASUREITEM_R

tanyufeng_521的专栏 5066

MFC中实现不同行高的CListCtrl

继承自CListCtrl,实现了表头的重绘、表本身设置行高不同、设置字体颜色、背景色等。功能比较齐全,可以直接拆分txt文件运行。

谈谈CListCtrl如何调整行高

调整CListCtrl 行高通常有3种方法: 设定字体设定图片处理MeasureItem消息。 这里只是谈一谈第3种方法,对于CListCtrl 来说,它只支持owner draw fixed 而不像CListBox 既支持owner draw fixed也支持owner draw variable,这里variable是指行高度是可变的;fixed 指行高度固定。我们虽然很容易在clas

sstower的专栏 1万+

自动驾驶仿真(五)—— 基于Carsim、Prescan、Simulink的联合仿真

自动驾驶仿真五——基于Carsim、Prescan、Simulink的联合仿真1. 联合仿真流程2. CarSim联合仿真配置要点3. Prescan联合仿真配置要点4. Carsim、Prescan、Simulink联合仿真结果5. 参考学习的书目教材 博主前面的博文已经介绍了Carsim和Prescan各自与Matlab/Simulink的相关联合仿真应用实例,并且论述过几款软件各自的优势及用法,CarSim适合动力学模型的建立,PreScan适合行车场景的搭建,Simulink适合控制算法的设计及信号

zhudj08的博客 1万+

ArcGIS基础:CAD数据转换为GIS数据(符号化显示、数据转换、线转面、空间连接)

1、符号化显示: CAD数据加载进来有很多列表,包含了点【point】、线【polyline】、面【polygon】、标注数据【Annotation】等数据,本次实验我们需要用到的是面数据,也就是.dwgPolygong格式的数据。如下图所示: 把数据加载进来,然后在2处打开属性表,查看CAD数据的属性表,打开后可以发现【layer】图层表示就是地块的用地性质,它就是符号化显示的依据。 我们在数据上右键【属性】,打开图层属性,找到【符号系统】,选择类别中的【唯一值】,然后在【值字段】下拉选择【layer】,

yuanYW7556的博客 2万+

CListCtrl行高的修改

<br />网上修改CListCtrl项高度的方法一般是扩大字体,及用图片将项高度撑大.<br />这两种方法虽然简单,但是效果却不是很理想.一种比较理想的方法是自画CListCtrl,不过方法相对来说比较复杂.<br />要修改CListCtrl的列表项高度,我们需要自己添加 MeasureItem 的消息响应函数,对应的消息是 WM_MEASUREITEM+WM_REFLECT_BASE, 而不是 WM_MEASUREITEM.在CListBox里我们可以直接在 ClassWizard 里将此消息响应添

dehuadeng的专栏 2228

单细胞分析实战:当Seurat的SCTransform遇上Harmony,我的整合流程优化笔记

本文详细介绍了单细胞转录组数据分析中SCTransform与Harmony整合流程的优化策略。通过实战案例展示如何调整SCTransform参数、优化Harmony整合效果,并解决常见问题,帮助研究者获得更可靠的生物学发现。特别适合需要处理批次效应的单细胞数据分析人员。

weixin_42552716的博客 357

ClistCtrl 修改行高并多行显示

修改行高 用图片填充行高 CImageList m_l; m_l.Create(1, 30, TRUE | ILC_COLOR32, 1, 0); m_list.SetImageList(&m_l, LVSIL_SMALL); m_list.InsertColumn(0, L"Text1", 0, 80); m_list.InsertColumn(1, L...

Kyle 1059

OpenBCI脑电数据处理实战:用MNE库从Raw对象到可视化分析全流程

本文提供了使用MNE-Python库处理OpenBCI脑电数据的完整实战指南。从通过BrainFlow库获取原始数据流、创建核心的Raw对象,到进行工频滤波、带通滤波等关键预处理步骤,最后实现时域信号、功率谱密度及地形图等多种专业可视化分析,手把手教你完成脑机接口数据处理的全流程。

gin88的博客 369

【自动驾驶端到端5:VADv2: End-to-End Vectorized Autonomous Driving via Probabilistic Planning】

从大规模人类驾驶演示中学习类人驾驶策略是有希望的。但是,规划的不确定性使得从驾驶演示中提取驾驶知识是有挑战性的。从统计学习的角度来看,动作(包括实际和速度)是高度随机的,受许多无法建模的潜在因素影响。

weixin_40000560的博客 1404

mfc之ClistCtrl控件自绘,实现修改列表框的行高和字的大小,间隔的修改某行颜色和高亮颜色

效果展示1.添加消息响应函数.h中添加(class CBaseEditListCtrl : public CListCtrl)int m_nRowHeight;void SetRowHeigt(int nHeight);afx_msg void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);afx_msg void OnMeasureIt...

qq_31479277的博客 4169

ILI9488 TFT屏驱动与触摸协同开发指南

TFT-LCD显示模块是嵌入式人机交互系统的核心外设,其工作原理依赖于专用显示控制器(如ILI9488)对GRAM显存的精确读写,并通过SPI等串行总线接收指令与图像数据。理解RGB接口时序、寄存器初始化流程及DC/CS信号控制逻辑,是实现稳定显示的基础技术前提;而四线电阻式触摸功能则需配合XPT2046类ADC控制器,通过独立SPI或模拟时序完成坐标采集。该方案兼顾低功耗、高集成与工程可移植性,广泛应用于工业HMI、仪器仪表及STM32F407等MCU平台的教学与产品开发。本文围绕3.5英寸320×480

weixin_33814090的博客 149

VC中CListCtrl的报表设置

本文介绍了列表控件(List Control)的高级设置方法,包含四个主要步骤:1)基本设置,包括清空数据、设置为报表视图、设置字体行高和添加列标题;2)数据添加方法,通过InsertItem和SetItemText实现;3)斑马线效果实现,通过自定义绘制事件设置奇偶行不同背景色;4)单元格双击编辑功能,通过创建隐藏的编辑框控件,在双击时定位显示并获取修改内容。这些方法完整演示了如何优化列表控件的显示效果和交互功能。

丰空岛主(Vega Prime,Android,LabWindows,ThreeJS,Python,OpenCV) 476

STM32入门教程:智能储物柜控制

在这个例子中,我们将使用一个4x4的储物柜,共有16个储物格。我们了解了硬件准备、储物柜电路设计、STM32的基本配置、储物柜控制代码的编写以及测试和调试等方面的知识。根据我们的电路设计,我们需要将一些引脚配置为输出,并将其他引脚配置为输入。在本教程中,我们将使用STM32微控制器来实现一个基本的智能储物柜控制系统。在主函数中,我们将不断循环读取传感器数据,并根据数据的变化来控制储物柜的开关和显示相关信息。这个函数将读取人体感应传感器、温湿度传感器和光照传感器的数据,并将数据存储到相应的变量中。

m0_75244442的博客 660

【Go语言实战】(2) Gin+Vue 电子商城

618来!!不用纠结去哪里剁手了!直接自己安排一个商场不香吗??

面向生活编程 4827

CListCtrl 设置行高

1 关联图片     CImageList   m_l;     m_l.Create(1,24,TRUE|ILC_COLOR32,1,0);     m_list.SetImageList(&m_l,LVSIL_SMALL);   2 关联字体       CFont m_font;     m_font.CreatePointFont(120, "宋体");     m

丰空岛主(Vega Prime,Android,LabWindows,ThreeJS,Python,OpenCV) 1000

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

在MFC中使用CListCtrl,实现每行的行高不同

在MFC程序中,其实根据系统提供,只能将每行的高度设置成相同的。但是在实际工程中,有时需要设置不同的行高,但是又保证该控 件的使用和系统提供的相似。我觉得很难。 我也曾在网上找过相关的资料,但是都是只有提问者,回答者几乎没有。 但是我的工程中需要有这样的功能时,我便自己重写继承了下CListCtrl类,在外部使用的时候与CListCtrl控件的功能相同,只是在内 部重绘的时

糯诺诺米团 3948

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MFC-CListCtrl设置行高

CListCtrl改变行高: 1. 表的修改   新建一个MFC类CMyListCtrl,其基类为CListCtrl,属性Owner Draw Fixed设置为TRUE; 添加变量CMyListCtrl m_List;MyListCtrl.h文件里,添加变量int m_nRowHeight; 2、重载DrawItem()实现自绘,实现请参照以下代码。    手动添加消息宏ON_WM_M

山茶果 5808

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

美化CListCtrl中显示的焦点行

经常使用ClistCtrl来显示大量的数据,但是总感觉焦点行的背景颜色为蓝色,显示的效果挺难看的,参考《MFC技术内幕》这本书中的例子,自己修改了ClistCtrl的OnPaint代码,把焦点行改为白色的背景,加了一个矩形的边框,下面实际的效果,自我感觉还不错;    实现思路:1、  首先调用Default,让ClistCtrl自己画2、  调用GetDC()函数获得DC

1540
下一篇: 可编辑单元格的CListCtrl控件
ecbtnrt
博客等级 码龄20年 92粉丝 47原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值