自绘CListCtrl时发现ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应

为列表框控件List Control设置行高 简介   MFC的标准列表框控件并有给出设置每一行高度的接口。 有两种方法可以设置: 1.取巧的方法:为列表框插入图标,每一行的高度自动变为图标的高度。这个方法很快,但总觉得有点别扭,且不好移植。所以我用这种方法。 2.自列表框,这正是本文要说的。   效果预览       实现过程   1.在对话框上拖拉出一个List Control 控件,并设置属性Owen D 阅读详情

自绘CListCtrl时发现ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应

一般情况下,我们都是在 dialog 里面 放一个 list 控件,然后 用自己的类绑定自己的自绘对象,如同下面:

1.  在 dialog 里面 加一个 list 列表

2. 然后 绑定这个列表

哈哈,那么恭喜你,你的自绘 CListCtrl 控件 重写的ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应的。

为什么呢? 自己想吧,其他不多说,只是 MFC 的机制很日怪!

给出正确的做法吧,在 dialog 里面 去掉 list, 在去掉 DDX_Control(pDX, IDC_LIST_Glass, m_glassListCtrl);

然后在 适当的地方加上,比如下面:

BOOL CPickingPanel::OnInitDialog()
{
    CBackgroundDlg::OnInitDialog();

    DWORD dwListStyle = WS_VISIBLE | WS_CHILD | LVS_REPORT | LVS_OWNERDRAWFIXED;
    if (m_list.Create(dwListStyle, CRect(0, 0, 0, 0), this, 0) == -1)
        return FALSE;

....

现在 你从 CMFCCtrlList 的子类 就可以 重绘了。

成都本征科技, 三维测量系统 定制!!

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

相关推荐

【问题解析】Matlab Function的易错点(Variable Size)

Matlab Function的易错点

CrazyRabbit的博客 9826

CListCtrl 修改行高

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

tanyufeng_521的专栏 5061

uniapp map地图实现marker聚合点,并点击marker触发事件

【代码】uniapp map地图实现marker聚合点,并点击marker触发事件。

weixin_44705979的博客 5417

MFC CListCtrl单元格,设置行高

CListCtrl CListCtrl所在的对话框是代码创建,该对话框中动态创建了一个ClistCtrl的子类, 结果不能响应消息WM_DRAWITEM,不能触发虚函数DrawItem.于是我在对话框(父窗口)messagemap中加入了     ON_WM_DRAWITEM()     ON_WM_MEASUREITEM()     ON_WM_MEASUREITEM_REFLECT() //...

youyudexiaowangzi的专栏 3065

VS2022 CListBox重以及异常崩溃解决

VS2022有低版本的 HASSTRINGS配置,需要手动进到rc文件进行修改。可能由于有添加映射导致,后期上面步骤设置完毕后也有再次出现该问题。VS2022版本的不能使用下列代码获取字符串,会获取到空字符串。借鉴了扁平化设计的代码。

weixin_42450698的博客 453

CListCtrl 中使用 DrawItem MeasureItem 注意事项

//-- declarationprotected:    //{{AFX_MSG(CMyListCtrl)    afx_msg void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);   //-- Message    //}}AFX_MSG    virtual void DrawItem( LPDRAWITEMSTRUCT lp

lekonpeng的专栏 3800

CListCtrl行高的修改

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

gxj1680的专栏 7385

clistctrl,总结一下,免得又搞忘了,

1. 要设置LVS_OWNERDRAWFIXED风格,并且重 virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 在看的到行变高的效果 在GetColumn(),GetSubItemRect(),等可以重所用的东西 2. 在cpp文件中要设置这两个消息,进行响应 ON_WM_MEASUREITEM() ON_WM_M

wateryh的专栏 5049

CListCtrl修改行高

网上修改CListCtrl项高度的方法一般是扩大字体,及用图片将项高度撑 大.这两种方法虽然简单,但是效果却不是很理想.一种比较理想的方法是自画CListCtrl,不过方法相对来说比较复杂.要修改CListCtrl的列表项高度,我们需要自己添加 MeasureItem 的消息响应

向开源软件的开发者们致敬 3142

关于重写CListCtrlMeasureItem不被调用的问题

MeasureItem不被调用的这个东西,网上很多朋友都遇到过,在此写出自己的原因。hclass CListCtrlEx : public CListCtrl{DECLARE_DYNAMIC(CListCtrlEx)public:CListCtrlEx();virtual ~CListCtrlEx();virtual void DrawItem(LPDRAWITEMSTRUCT lpDr...

weixin_34342992的博客 485

CListCtrl

花了一个晚上学习listctrl的自,不是很简单,可能比CRichEditCtrl还要复杂些,遇到第一件事情是自适应改变行高,项目需要,当然也可以是固定,最终解决方案如下: 网上修改CListCtrl项高度的方法一般是扩大字体,及用图片将项高度撑大.这两种方法虽然简单,但是效果却不是很理想.一种比较理想的方法是自画CListCtrl,不过方法相对来说比较复杂.要修改CListCtrl的列表项高...

weixin_34417814的博客 106

MFC表格控件CListCtrl的改造及用法

MFC表格控件CListCtrl的改造及用法

欧特GO 1996

MFC-CListCtrl设置行高

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

山茶果 5807

mfcClistCtrl控件自,实现修改列表框的行高字的大小,间隔的修改某行颜色高亮颜色

效果展示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的博客 4165

MFC 自定义CListCtrl

本文的代码也是根据网上现有的改编而来首先是.h#pragma once #include "HeaderCtrlCl.h" // CListCtrlClclass CListCtrlCl : public CListCtrl { DECLARE_DYNAMIC(CListCtrlCl)public: CHeaderCtrlCl m_Header; CListCtrlCl();

小乌龟的博客 2791

CListCtrl实现合并单元格的效果

#pragma once class AutoScanTable : public CListCtrl { public: enum ROWTYPE { AUTOSCAN_ROW_NORMAL = 0, AUTOSCAN_ROW_DTC = 1 }; private: unsigned int m_uRowHeight; CRect m_listRect; public: AutoScanTable(); ...

Allen Roson 2061
上一篇: 在 固定式 三维双目测量系统中 使用 CTreeCtrl 完成 Group 的操作 概念
mfreesky
博客等级 码龄19年 34粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值