如果你想在 CD2DGradientBrush 类中添加一个受保护的数据成员 m_arGradientStops,用于存储渐变停止集合,你可以按照以下方式修改类的定义和实现:
// CD2DGradientBrush.h

#pragma once

#include <afxwin.h>
#include <d2d1.h>
#include <vector>

class CD2DGradientBrush
{
public:
    // 公共构造函数
    CD2DGradientBrush(ID2D1RenderTarget* pRenderTarget, const D2D1_POINT_2F& startPoint, const D2D1_POINT_2F& endPoint);

    // 析构函数
    ~CD2DGradientBrush();

    // 受保护方法
protected:
    // 销毁渐变刷资源
    void Destroy();

    // 其他成员函数和数据成员可以在这里添加
    // ...

    // 受保护的渐变停止集合
    std::vector<D2D1_GRADIENT_STOP> m_arGradientStops;

private:
    // 用于存储 Direct2D 渐变刷的私有成员
    CComPtr<ID2D1GradientBrush> m_pGradientBrush;
};


在上述示例中,m_arGradientStops 是一个 std::vector<D2D1_GRADIENT_STOP>,用于存储渐变停止的信息。你可以在构造函数中初始化它,然后在需要时使用这个容器进行渐变停止的管理。

修改 CD2DGradientBrush 类的实现,确保在构造函数中初始化 m_arGradientStops 并在 Destroy 方法中释放相关资源:
// CD2DGradientBrush.cpp

#include "stdafx.h"
#include "CD2DGradientBrush.h"

CD2DGradientBrush::CD2DGradientBrush(ID2D1RenderTarget* pRenderTarget, const D2D1_POINT_2F& startPoint, const D2D1_POINT_2F& endPoint)
{
    // 初始化渐变停止集合
    D2D1_GRADIENT_STOP gradientStops[] = {
        // ... 添加渐变停止的具体信息 ...
    };

    m_arGradientStops.assign(std::begin(gradientStops), std::end(gradientStops));

    // 创建线性渐变刷
    CComPtr<ID2D1GradientStopCollection> pGradientStops;
    // ... 初始化渐变停止集合 ...

    pRenderTarget->CreateLinearGradientBrush(
        D2D1::LinearGradientBrushProperties(startPoint, endPoint),
        pGradientStops,
        &m_pGradientBrush
    );
}

CD2DGradientBrush::~CD2DGradientBrush()
{
    // 在析构函数中释放渐变刷资源
    Destroy();
    // 可以添加其他需要在对象销毁时释放的资源清理代码
}

void CD2DGradientBrush::Destroy()
{
    // 清理渐变停止集合
    m_arGradientStops.clear();

    // 在销毁函数中释放渐变刷资源
    m_pGradientBrush.Release();
    // 可以添加其他需要在销毁时释放的资源清理代码
}

这样,你就可以在 CD2DGradientBrush 对象中使用 m_arGradientStops 来存储和管理渐变停止,确保在销毁对象时释放相关资源。


转载请注明出处:http://www.zyzy.cn/article/detail/16264/MFC/CD2DGradientBrush