文件视图中的CTreeCtrl按要求改变颜色

该博客介绍了如何在MFC应用程序中使用CViewTree类响应NM_CUSTOMDRAW消息,自定义CTreeCtrl控件的绘制,以实现根据节点状态动态改变颜色。作者通过创建HOSTRAW结构体来存储每个节点的状态,并在OnNMCustomdraw函数中遍历结构体,根据状态设置不同颜色。这种方法允许在不重新绘制所有节点的情况下,只修改特定节点的颜色。

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

最近开发一个测试工具,各种测试内容在左侧的CTreeCtrl显示由MFC的MDI提供

需求如下图:

 网上有不少网友提供了通过改写CViewTree类的响应NM_CUSTOMDRAW消息,自绘CTreeCtrl控件。但是在操作中还是遇到一些问题现总结如下:

void CViewTree::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
    //    LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
        // TODO: 在此添加控件通知处理程序代码
    *pResult = 0;
    NMTVCUSTOMDRAW* pNMCD = (NMTVCUSTOMDRAW*)(pNMHDR);
    if (CDDS_PREPAINT == pNMCD->nmcd.dwDrawStage)
    {
        *pResult = CDRF_NOTIFYITEMDRAW;
    }
    else if ((CDDS_ITEMPREPAINT) == pNMCD->nmcd.dwDrawStage)
    {
        COLORREF clrOldColor;
        COLORREF clrLoseColor, clrSuccessColor;
        clrOldColor = pNMCD->cl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值