CListCtrl 的自绘

本文介绍如何通过处理NM_CUSTOMDRAW消息来自行绘制ClistCtrl列表项,并提供了详细的步骤和示例。文章涵盖NMLVCUSTOMDRAW结构的解析及不同绘图阶段的通知处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自行绘制 ClistCtrl 的列表项,可以利用列表框的 NM_CUSTOMDRAW 消息,该消息由控件向它的父窗口发送,告诉父窗口它的绘图操作。


    如果绘图操作不需要父窗口参与,可以使用该控件的 ON_NOTIFY_REFLECT 宏处理它的 NM_CUSTOMDRAW 消息。


    它的处理函数的参数中包含 NMHDR,在 CUSTOMDRAW 的通知下 NMHDR 可以被转换成为 NMLVCUSTOMDRAW 结构,该结构包含了列表控件中需要自绘区域的全部信息:


typedef struct tagNMLVCUSTOMDRAW 

    NMCUSTOMDRAW   nmcd;                // 包含客户自绘控件信息的结构 
    COLORREF             clrText;              // 列表视图显示文字的颜色 
    COLORREF             clrTextBk;          // 列表视图显示文字的背景色 
} NMLVCUSTOMDRAW, *LPNMLVCUSTOMDRAW;


NMCUSTOMDRAW 结构定义如下:


typedef struct tagNMCUSTOMDRAWINFO 

    NMHDR     hdr;                     // 含有通知信息的 NMHDR 结构 
    DWORD   dwDrawStage;       // 目前绘制的步骤 
    HDC         hdc;                     // 设备上下文句柄 
    RECT        rc;                       // 绘制的区域 
    DWORD    dwItemSpec;        // 绘制项的说明 
    UINT        uItemState;          // 当前项的状态 
    LPARAM   lItemlParam           // 应用程序定义的数据 
} NMCUSTOMDRAW, FAR * LPNMCUSTOMDRAW;


    NMLVCUSTOMDRAW.nmcd.dwDrawStage 字段,它主要包含以下几个枚举值:


CDDS_PREPAINT:表示在绘画前阶段。
CDDS_ITEMPREPAINT:表示在列表项的绘画前阶段。
CDDS_SUBITEM:表示绘制子项。
CDDS_ITEM:表示要绘制项的信息已经可用。
    自绘时,可以通过处理以上几个绘画阶段的通知来实现。


 


例子详细步骤:


来源:http://shuiyuan2004.com.blog.163.com/blog/static/910905342009420115140854/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值