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

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.

“获取平均字符宽度。”

我无法获取字体字符的实际宽度吗?

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

谢谢。

最佳答案

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

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

评论后更新:

通过在已知的字符串长度上重复字母“M”,您将获得应满足的最宽的字符串。您几乎没有选择,因为对于可变宽度的字体(例如Arial),不可能获得一个单一值-每个字符的宽度都不同,因此可以应对最坏的情况。

10-06 12:36
查看更多