我在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;
Run Code Online (Sandbox Code Playgroud) 为什么我必须将MeasureString()结果宽度增加21%
size.Width = size.Width * 1.21f;
来逃避Word Wrap DrawString()?
我需要一个解决方案来获得确切的结果.
相同的字体,相同的字符串格式,两个函数中使用的文本相同.
从OP回答:
SizeF size = graphics.MeasureString(element.Currency, Currencyfont, new PointF(0, 0), strFormatLeft);
size.Width = size.Width * 1.21f;
int freespace = rect.Width - (int)size.Width;
if (freespace < ImageSize) { if (freespace > 0) ImageSize = freespace; else ImageSize = 0; }
int FlagY = y + (CurrencySize - ImageSize) / 2;
int FlagX = (freespace - ImageSize) / 2;
graphics.DrawImage(GetResourseImage(@"Flags." + element.Flag.ToUpper() + ".png"),
new Rectangle(FlagX, FlagY, ImageSize, ImageSize)); …Run Code Online (Sandbox Code Playgroud)