谈谈CListCtrl如何调整行高

原文链接: http://blog.csdn.net/sstower/article/details/9094939

调整CListCtrl 行高通常有3种方法:

1.设定字体
2.设定图片
3.处理MeasureItem消息。

这里只是谈一谈第3种方法,对于CListCtrl 来说,它只支持owner draw fixed 而不像CListBox 既支持owner draw fixed也支持owner draw variable,这里variable是指行高度是可变的;fixed 指行高度固定。
我们虽然很容易在classWizard 找到虚函数DrawItem但却找不到MeasureItem函数。这个时候只能自己动手添加这样的函数,它的原型为:

MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)

{

}

从CListCtrl继承一个类,假如类名叫CTreeList,这样它的函数实现就是这个样子:

void CTreeList::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)

{

}

注意在消息映射部分要添加对WM_MEASUREITEM的反射消息:

ON_WM_MEASUREITEM_REFLECT()

默认情况下,这个消息并不会触发。这时可在PreSubclassWindow()函数中人为触发:

void CTreeList::PreSubclassWindow()
{
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);
}

处理MeasureItem消息:

void CTreeList::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
lpMeasureItemStruct->itemHeight = m_nItemHeight;
}

最后别忘了在构造函数中初始化m_nItemHeight为你想要的值。

这里稍微怪异一点的是为什么发送WM_WINDOWPOSCHANGED会触发WM_MEASUREITEM消息。

时间: 2024-10-16 20:40:53

谈谈CListCtrl如何调整行高的相关文章

Excel快速删除空白行与调整行高列宽的方法,学会了很实用

Excel表格作为大家经常使用的办公文档,在使用的过程中我们也会遇到各种问题,比如常见的行高列宽的调整.空白行的删除的等等.今天小编就为大家带来了Excel快速删除空白行与行高列宽的方法,希望可以帮助到大家. 一:调整行高列宽 作为Excel表格最常见的问题之一,我们在办公中常用到的调整行高列宽的方法主要有两种,都非常的简单方便. 方法1: 第一种方法也是最简单的一种方法,把鼠标光标放置在行高或者是列宽线条上时,就会出现一个[黑色双箭头]的标志,点击即可拉动线条调整行高.列宽.(唯一的弊端是行高

【转】phpcms v9的ckeditor加入给内容调整行高

今天公司一客户要求一同事给ckeditor加入可以设置行高的功能(他后台是用织梦做的,他是织梦的FANS),我一时闲得慌,也想给咱家的v9加入这个功能,功夫不负有心啊,终于成功了,来给大家分享一下! 首先下载lineheight插件,我已经上传附件给大家了 第二步:在v9的与phpcms同级的目录找到statics/js/ckeditor/plugins这个目录:再把lineheight插件解压到这个目录! 第三步:找到statics/js/ckeditor/config.js修改如下: CKE

wpf datagrid row height 行高自动计算使每行行高自适应文本

wpf 的datagrid的行高 要么是Auto,要么是定值:但会带来麻烦就是每行行高都一样. 当需要按内容(主要是wrap 换行的textbox或textblock)来动态调整行高的时候,需要用到dataGrid的LoadingRow 事件. 参考两个网页: http://stackoverflow.com/questions/9264398/how-to-calculate-wpf-textblock-width-for-its-known-font-size-and-characters

mysql中的回车换行,jtable换行,自动调整行高,列宽 \r \n <br/>

两个问题: 1.mysql里不支持换行,textarea里的回车传入后再传出来就变成了空格. 2.JTable的render默认是继承jlabel的,不支持换行显示. 为了实现换行,一种方法是新写个render继承jtextarea,但是这样了之后不好设自动调整列宽,行高不能根据回车调整,也调的不准,而且超级卡...这种方法代码可以自己网上搜. 下面介绍第二种方法:默认的render不支持换行显示,我们先实现让单元格可以换行.我们在某一个单元格的value前面加上,末尾加,中间要要换行的地方加

1. DataGridView设置字体、行高、列宽、单列居中

DataGridView表格内容的列宽.行高.字体的设置,设置某一列居中.一般地,会将行高设为统一的,列宽根据不同情况设定. [csharp] view plaincopyprint? // 调整字体 dataGridView1.Font = new Font("宋体", 11); // 调整行高 //dataGridView1.Rows[0].Height = 100; dataGridView1.RowTemplate.Height = 30; dataGridView1.Upda

QuickReport根据每行的内容长度动态调整DetailBand1的行高

procedure TPosPubFactureRep.DetailBand1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); var n, total : integer; str : String; begin total := 1; str := ADOArticle.FieldByName('my_data').AsString; Repeat n := Pos(#13, str); if n>0 then begin

DataGridView使用技巧五:自动设定列宽和行高

一.设定行高和列宽自动调整 设定包括Header和所有单元格的列宽自动调整 1 //设置包括Header和所有单元格的列宽自动调整 2 this.dgv_PropDemo.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 设定包括Header和所有单元格的行高自动调整 1 //设置包括Header和所有单元格的行高自动调整 2 this.dgv_PropDemo.AutoSizeRowsMode = DataGridV

《转载》深入理解 CSS 中的行高与基线

这篇文章总结的很好,故转载收藏. 1.基本概念 1.  基线.底线.顶线.中线 注意:基线(base line)并不是汉字文字的下端沿,而是英文字母“x”的下端沿. 2. 内容区 内容区是指底线和顶线包裹的区域(行内元素display:inline可以通过background-color属性显示出来),实际中不一定看得到,但确实存在.内容区的大小依据font-size的值和字数进行变化. 3. 行距.行高 行高(line-height):包括内容区与以内容区为基础对称拓展的空白区域,我们称之为行

几种基本样式,背景图,字体,下划线,行高垂直等

<div style=:width:600px; heiget:600px; background-color:...; background-image; background-repea:...; background-position; 宽度               高度                背景颜色                     背景图片                   背景图平铺                 背景图位置 background-attach