用wxWidgets计算字符串的显示宽度
Calculate the display width of a string with 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.
"Gets the average character width.."
我不能得到字体字符的实际宽度吗?
如果不是,如何正确计算字符串的显示宽度?
谢谢。
使用 DC 测量给定单行字符串的宽度和高度,而不是获取字体字符的宽度 wxDC::GetTextExtent
wxScreenDC dc;
dc.SetFont(f.font);
wxString tempString('M', length);
wxCoord width, height;
dc.GetTextExtent(tempString, &width, &height);
评论后更新:
通过按您知道的字符串长度重复字母 'M',您几乎可以得到应满足的最宽字符串。您几乎没有选择,因为对于像 Arial 这样的可变宽度字体,不可能获得一个单一的值——每个字符的宽度都不同,因此要应对最坏的情况。
我正在尝试使用不同长度的不同字体在屏幕上绘制字符串。
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.
"Gets the average character width.."
我不能得到字体字符的实际宽度吗?
如果不是,如何正确计算字符串的显示宽度?
谢谢。
使用 DC 测量给定单行字符串的宽度和高度,而不是获取字体字符的宽度 wxDC::GetTextExtent
wxScreenDC dc;
dc.SetFont(f.font);
wxString tempString('M', length);
wxCoord width, height;
dc.GetTextExtent(tempString, &width, &height);
评论后更新:
通过按您知道的字符串长度重复字母 'M',您几乎可以得到应满足的最宽字符串。您几乎没有选择,因为对于像 Arial 这样的可变宽度字体,不可能获得一个单一的值——每个字符的宽度都不同,因此要应对最坏的情况。