// 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;
// 受保护的颜色插值伽马值
D2D1_GAMMA m_colorInterpolationGamma;
// 受保护的扩展模式
D2D1_EXTEND_MODE m_extendMode;
// 受保护的渐变停止集合指针
CComPtr<ID2D1GradientStopCollection> m_pGradientStops;
private:
// 用于存储 Direct2D 渐变刷的私有成员
CComPtr<ID2D1GradientBrush> m_pGradientBrush;
};
在上述示例中,m_pGradientStops 是一个 CComPtr<ID2D1GradientStopCollection> 类型的成员变量,用于存储渐变停止集合的指针。你可以在构造函数中初始化它,并在创建渐变刷时使用这个指针。
修改 CD2DGradientBrush 类的实现,确保在构造函数中初始化 m_pGradientStops 并在 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));
// 初始化颜色插值伽马值
m_colorInterpolationGamma = D2D1_GAMMA_2_2; // 例如,设置为默认值 D2D1_GAMMA_2_2
// 初始化扩展模式
m_extendMode = D2D1_EXTEND_MODE_CLAMP; // 例如,设置为默认值 D2D1_EXTEND_MODE_CLAMP
// 创建渐变停止集合
pRenderTarget->CreateGradientStopCollection(
m_arGradientStops.data(),
m_arGradientStops.size(),
&m_pGradientStops
);
// 创建线性渐变刷
pRenderTarget->CreateLinearGradientBrush(
D2D1::LinearGradientBrushProperties(startPoint, endPoint),
m_pGradientStops,
&m_pGradientBrush
);
}
CD2DGradientBrush::~CD2DGradientBrush()
{
// 在析构函数中释放渐变刷资源
Destroy();
// 可以添加其他需要在对象销毁时释放的资源清理代码
}
void CD2DGradientBrush::Destroy()
{
// 在销毁函数中释放渐变刷资源
m_pGradientBrush.Release();
// 释放渐变停止集合指针
m_pGradientStops.Release();
// 清理渐变停止集合
m_arGradientStops.clear();
// 可以添加其他需要在销毁时释放的资源清理代码
}
这样,你就可以在 CD2DGradientBrush 对象中使用 m_pGradientStops 来存储和管理渐变停止集合,确保在销毁对象时释放相关资源。
转载请注明出处:http://www.zyzy.cn/article/detail/16267/MFC/CD2DGradientBrush