我正在尝试使用不同长度的不同字体在屏幕上绘制一个字符串。
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.
“获取平均字符宽度..”
我无法获取字体字符的实际宽度吗?
如果没有,如何正确计算字符串的显示宽度?
谢谢。
最佳答案
使用 DC 来测量给定单行字符串的宽度和高度,而不是获取字体字符的宽度 wxDC::GetTextExtent
wxScreenDC dc;
dc.SetFont(f.font);
wxString tempString('M', length);
wxCoord width, height;
dc.GetTextExtent(tempString, &width, &height);
评论后更新:
通过按照您知道的字符串长度重复字母“M”,您几乎可以得到您应该满足的最宽的字符串。您几乎没有选择,因为对于像 Arial 这样的可变宽度字体,不可能获得一个值 - 每个字符都有不同的宽度,因此要适应最糟糕的情况。
关于c++ - 使用wxWidgets计算字符串的显示宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30327748/