我尝试使用不同长度的不同字体在屏幕上绘制字符串。
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.
"获取平均字符宽度。"
我能否获得字体字符的实际宽度?
如果没有,我该如何正确计算字符串的显示宽度?
感谢。
答案 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这样的可变宽度字体,它不可能获得一个单独的值 - 每个字符都是不同的宽度,因此可以满足最糟糕的情况。