// 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