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

Fre*_*kyy 5 c++ directx text

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

像这样的东西:

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

gui-> fonts-> CreateFont的部分工作正常.这是我创建和存储字体的方式.忽略那部分,它都是关于GetTextWidth的.我的CreateFont函数初始化GUIFont对象.实际的D3D-Font存储在LPD3DXFONT中.

我真的希望你可以帮我这个,我很确定这是可能的 - 我只是不知道如何.感谢阅读,我希望你有一个线索.

Rog*_*and 7

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

所以,如果你想获得宽度,你可能会有这样的函数:

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;
}
Run Code Online (Sandbox Code Playgroud)

显然,如果需要,您也可以提取高度.