我正在使用 Embarcadero RAD Studio XE7 编译器(C++ Builder),其中我正在尝试提供的 Direct2D API。我的目的是创建提供与 GDI 完全相同的渲染的应用程序,但也可能受益于 Direct2D 提供的新功能,例如 Window 10 上的彩色表情符号。
在这种背景下,我编写了一个小型文本绘制函数,它使用 Direct2D 来完成这项工作。我还搜索了如何配置 Direct2D/DirectWrite 来绘制尽可能接近 GDI 功能的文本。
这导致了以下功能:
void DrawText_Direct2D(const std::wstring& text, const TRect& rect, TColor bgColor,
        TFont* pFont, TCanvas* pCanvas)
{
    if (!pFont || !pCanvas)
        return;
    // fill destination canvas background with provided color
    WGDIHelper::Fill(pCanvas, rect, bgColor);
    ::D2D1_RECT_F drawRect;
    drawRect.left   = rect.Left;
    drawRect.top    = rect.Top;
    drawRect.right  = rect.Right;
    drawRect.bottom = rect.Bottom;
    // get Direct2D destination canvas
    std::unique_ptr<TDirect2DCanvas> pD2DCanvas(new TDirect2DCanvas(pCanvas->Handle, rect));
    // configure Direct2D …Run Code Online (Sandbox Code Playgroud) directwrite ×1