我在使用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;
MeasureString
返回的宽度值还是稍微小一些。为了弥补这个问题并得到正确的宽度,我不得不为字符串中的每个字符添加0.3333f。通过这样做,它几乎完美地工作了。你有什么想法,我可能错过了什么导致我需要进行这个手动调整?这与使用的字母无关 - 不管是窄的还是宽的;只是必须为字符串中的每个字符添加这个值。 - Damir Tenishev