gdi+ - MeasureString()填充左侧和右侧的文本

标签 gdi+ drawstring

我在C ++中使用GDI +。 (此问题也可能在C#中存在)。

我注意到,每当我调用Graphics :: MeasureString()或Graphics :: DrawString()时,该字符串就会在左侧和右侧填充空白。

例如,如果我使用的是Courier字体(不是斜体!),并且我测量“ P”,我得到90,但是“ PP”给我150。我希望等宽字体给出的宽度恰好是“ PP”的两倍。 。

我的问题是:这是预期的还是已记录的行为,如何禁用此行为?

RectF Rect(0,0,32767,32767);
RectF Bounds1, Bounds2;
graphics->MeasureString(L"PP", 1, font, Rect, &Bounds1);
graphics->MeasureString(L"PP", 2, font, Rect, &Bounds2);
margin = Bounds1.Width * 2 - Bounds2.Width;

最佳答案

这是设计使然,该方法不使用实际的字形来测量宽度,因此在悬垂的情况下会增加一些填充。

如果需要更高的准确性,MSDN建议使用其他方法:


若要获取适合于布局中相邻字符串的度量标准(例如,在实现格式化文本时),请使用MeasureCharacterRanges方法或采用MeasureStringStringFormat方法之一,并传递GenericTypographic。另外,确保TextRenderingHintGraphicsAntiAlias

关于gdi+ - MeasureString()填充左侧和右侧的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/118686/

相关文章:

vb.net - 居中绘制文本

.net - GDI+ 中的经验法则

c++ - CMFCButton 编译错误

java - 使用DecimalFormat(强制点)和drawString()(y似乎是错误的)

c++ - 将图像绘制到透明位图时字符周围出现黑色边框

C# 从右角开始旋转 DrawString

c# - drawString方法如何用对角线写法

.net - 根据框大小绘制复选框刻度?

c# - .NET 桌面应用程序方法的良好实时显示性能和输入处理

c# - 绘制 3D 风格效果时遇到问题