// CD2DGradientBrush.h
#pragma once
#include <afxwin.h>
#include <d2d1.h>
class CD2DGradientBrush
{
public:
// 公共构造函数
CD2DGradientBrush(ID2D1RenderTarget* pRenderTarget, const D2D1_POINT_2F& startPoint, const D2D1_POINT_2F& endPoint);
// 析构函数
~CD2DGradientBrush();
// 受保护方法
protected:
// 销毁渐变刷资源
void Destroy();
// 其他成员函数和数据成员可以在这里添加
// ...
private:
// 用于存储 Direct2D 渐变刷的私有成员
CComPtr<ID2D1GradientBrush> m_pGradientBrush;
};
在类的实现文件中,你可以添加 Destroy 方法的具体实现:
// CD2DGradientBrush.cpp
#include "stdafx.h"
#include "CD2DGradientBrush.h"
CD2DGradientBrush::CD2DGradientBrush(ID2D1RenderTarget* pRenderTarget, const D2D1_POINT_2F& startPoint, const D2D1_POINT_2F& endPoint)
{
// 创建线性渐变刷
CComPtr<ID2D1GradientStopCollection> pGradientStops;
// ... 初始化渐变停止集合 ...
pRenderTarget->CreateLinearGradientBrush(
D2D1::LinearGradientBrushProperties(startPoint, endPoint),
pGradientStops,
&m_pGradientBrush
);
}
CD2DGradientBrush::~CD2DGradientBrush()
{
// 在析构函数中释放渐变刷资源
Destroy();
// 可以添加其他需要在对象销毁时释放的资源清理代码
}
void CD2DGradientBrush::Destroy()
{
// 销毁渐变刷资源
m_pGradientBrush.Release();
// 可以添加其他需要在销毁时释放的资源清理代码
}
通过这样的设计,你可以在需要的时候调用 Destroy 方法,手动释放 CD2DGradientBrush 对象所持有的资源,而不必等到对象被销毁。这对于需要显式地管理资源的场景可能会很有用。
转载请注明出处:http://www.zyzy.cn/article/detail/16263/MFC/CD2DGradientBrush