我正在使用 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