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

标签 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.

“获取平均字符宽度..”

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

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

谢谢。

最佳答案

使用 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/

相关文章:

css - 发送电子邮件 rails 和字体不显示电话

javascript - Webpack 5 Assets 模块与 woff 文件有关

c++ - 内存排序问题

c++ - 为什么 const 引用在分配左值和右值时表现不同?

jquery - 带有 jquery 和 css 的字体调整器

c++ - 使用 wxWidgets 和 FormBuilder 绘制区域

c++ - 如何在Wxwidgets中调试?

c++ - wxWidgets - 无模式 wxDialog

c++ - 结合 mysql_real_escape 字符串与 sprintf

c++ - 一个头文件中的多个类与每个类一个头文件