如何获取文本宽度(DirectX,C++)

How to get text width (DirectX, C++)

本文关键字:DirectX C++ 何获 取文本      更新时间:2023-10-16

我正在用d3d9&d3dx9.我使用D3DXCreateFont函数(C++)创建字体。一切都很好。但我需要一个函数来确定特定文本的像素宽度。

类似这样的东西:

char text[64] = "Heyho - Blablabla";
GUIFont* hFont = gui->fonts->CreateFont("DefaultFont", "Arial", 18);
int width = hFont->GetTextWidth(text);
[...]

使用gui->字体->CreateFont的部分运行良好。这是我创建和存储字体的方式。忽略这部分,它都是关于GetTextWidth的。我的CreateFont函数初始化GUIFont对象。实际的D3D字体存储在LPD3DXFONT中。

我真的希望你能帮我做这件事,我很确定这是可能的——我只是不知道怎么做。谢谢你的阅读,我希望你能有所了解。

您可以在ID3DXFont函数DrawText上使用DT_CALCRECT标志来返回包含文本的矩形的所需大小。

所以,如果你只想得到宽度,你可能有一个类似这样的函数:

int GetTextWidth(const char *szText, LPD3DXFont pFont)
{
    RECT rcRect = {0,0,0,0};
    if (pFont)
    {
        // calculate required rect
        pFont->DrawText(NULL, szText, strlen(szText), &rcRect, DT_CALCRECT,
                    D3DCOLOR_XRGB(0, 0, 0));
    }
    // return width
    return rcRect.right - rcRect.left;
}

显然,如果你需要的话,你也可以提取高度。