【问题标题】:How to get text width (DirectX, C++)如何获取文本宽度(DirectX、C++)
【发布时间】:2013-12-09 06:38:11
【问题描述】:

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

类似这样的:

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

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

我真的希望你能帮我解决这个问题,我很确定这是可能的 - 我只是不知道怎么做。感谢您的阅读,希望您有所了解。

【问题讨论】:

    标签: c++ text directx


    【解决方案1】:

    您可以在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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 2021-03-24
      • 2013-07-19
      相关资源
      最近更新 更多