用wxWidgets计算字符串的显示宽度

Calculate the display width of a string with wxWidgets

我正在尝试使用不同长度的不同字体在屏幕上绘制字符串。

wxScreenDC dc;
dc.SetFont(f.font);
f.height=dc.GetCharHeight();
f.width=dc.GetCharWidth();

这是我正在使用的代码,高度始终正确并且在屏幕上正确绘制.. 然而,宽度是某些字体在所有字体大小(例如 Fixedsys、Courier New)中正确绘制的,但在某些字体中绘制不正确(计算小于实际显示宽度)(例如 Arial)

我查看了文档并看到了

wxCoord wxDC::GetCharWidth () const

Gets the average character width of the currently set font.

"Gets the average character width.."

我不能得到字体字符的实际宽度吗?

如果不是,如何正确计算字符串的显示宽度?

谢谢。

使用 DC 测量给定单行字符串的宽度和高度,而不是获取字体字符的宽度 wxDC::GetTextExtent

wxScreenDC dc;
dc.SetFont(f.font);
wxString tempString('M', length);
wxCoord width, height;
dc.GetTextExtent(tempString, &width, &height);


评论后更新:

通过按您知道的字符串长度重复字母 'M',您几乎可以得到应满足的最宽字符串。您几乎没有选择,因为对于像 Arial 这样的可变宽度字体,不可能获得一个单一的值——每个字符的宽度都不同,因此要应对最坏的情况。