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

时间:2015-05-19 13:55:33

标签: c++ fonts 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.

"获取平均字符宽度。"

我能否获得字体字符的实际宽度?

如果没有,我该如何正确计算字符串的显示宽度?

感谢。

1 个答案:

答案 0 :(得分:3)

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

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

<小时/> 评论后更新:

通过你知道的字符串长度重复字母'M',你可以得到你应该提供的最宽泛的字符串。你没有什么选择,因为对于像Arial这样的可变宽度字体,它不可能获得一个单独的值 - 每个字符都是不同的宽度,因此可以满足最糟糕的情况。