如何获取文本宽度(DirectX,C++)
How to get text width (DirectX, C++)
我正在用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;
}
显然,如果你需要的话,你也可以提取高度。
相关文章:
- 如何在directx/c++中进行平移/缩放操作
- DrawIndexedInstanced 具有不同的 Index Count per Instance (Directx
- Directx 11 - CompileFromFile() is not compiling
- 字节数组初始化会导致 DirectX 崩溃
- 在 DirectX 11 中从 GPU 读回顶点缓冲区(并获取顶点)
- 是否可以使用 DirectX 3D 11 绘制由三角形组成的圆?
- Directx 12 :在两个进程之间共享图形内存
- DirectX 11 如何处理来自 GPU 上的 sharedHandle 的图像
- > 64k C++的 DirectX 大型机型
- Linking DirectX
- C++ Visual Studio 错误:名称后跟'::'必须是类或命名空间名称 (DirectX 11)
- DirectX 11 - 点光源阴影
- DirectX 12 和 C++ CLI :无法使用IID_PPV_ARGS
- DirectX 11 -- Hello Triangle 未呈现 -- 原因:运行时库C++多线程
- DirectX 11 引擎在第三次代码改进后没有突然运行,我不知道为什么
- 如何防止 DirectX C++程序的拉伸/缩放
- 什么是 DirectX 9 中的数据流?
- DirectX 9 在重置调用之间保留状态
- 无法使用 Visual Studio 启动 DirectX 11 可执行文件,生成工作正常
- 如何在 DirectX 中初始化 XMVECTOR?