一、实现思路
通过继承IDWriteTextRenderer定义自己的文本渲染类并重写DrawGlyphRun方法,最终将该类实例作为 IDWriteTextLayout::Draw的参数传入进行文本的绘制。
二、代码实现
1、自定义文本渲染类
class CustomTextRenderer : public IDWriteTextRenderer
{
protected:
ULONG m_cRef;
ID2D1Factory* m_pD2DFactory;
ID2D1RenderTarget *m_pRenderTarget;
ID2D1Brush *m_pTextBodyBrush;
ID2D1SolidColorBrush *m_pTextOutlineBrush;
float mStrokeWidth;
public:
CustomTextRenderer(
ID2D1Factory* pD2DFactory, ID2D1RenderTarget* pRenderTarget,
ID2D1Brush *pTextBodyBrush, ID2D1SolidColorBrush *pTextOutlineBrush,
float strokeWidth = 1.0f);
~CustomTextRenderer();
STDMETHOD(DrawGlyphRun)(
void *clientDrawingContext,
FLOAT baselineOriginX,
FLOAT baselineOriginY,
DWRITE_MEASURING_MODE measuringMode,
DWRITE_GLYPH_RUN const *glyphRun,
DWRITE_GLYPH_RUN_DESCRIPTION co