VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 839|回复: 2

[求助] 列表框怎么设置行高

[复制链接]
88_avatar_middle
online_vip 发表于 2016-5-13 00:22:45 | 显示全部楼层 |阅读模式
40_avatar_middle
在线会员 发表于 2016-5-13 08:51:38 | 显示全部楼层
路过占位,打酱油的……
51_avatar_middle
online_admins 发表于 2016-5-13 09:39:56 | 显示全部楼层
谈谈CListCtrl如何调整行高
调整CListCtrl 行高通常有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()函数中人为触发:
  1. void CTreeList::PreSubclassWindow()
  2. {
  3.   CRect rcwin;
  4.   GetWindowRect(rcwin);

  5.   WINDOWPOS wp;
  6.   wp.hwnd=m_hwnd;
  7.   wp.cx=rcwin.Width();
  8.   wp.cy=rcwin.Height();
  9.   wp.flags=SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOOWNERZORDER|SWP_NOZORDER;
  10.   SendMessage(WM_WINDOWPOSCHANGED,0,(LPARAM)&wp);
  11. }
复制代码


处理MeasureItem消息:
  1. void CTreeList::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
  2. {
  3.    lpMeasureItemStruct->itemHeight = m_nItemHeight;
  4. }
复制代码


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

这里稍微怪异一点的是为什么发送WM_WINDOWPOSCHANGED反而会触发WM_MEASUREITEM消息。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

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

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

GMT+8, 2019-8-19 12:49

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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