MeasureString()은 왼쪽과 오른쪽의 텍스트를 채웁니다.
-
02-07-2019 - |
문제
저는 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;
다른 팁
의도적으로 설계된 것은 사실이지만 허용되는 답변의 링크는 실제로 완벽하지 않습니다.문제는 실제로 사용하려는 것이 픽셀(ints)일 때 모든 메서드에서 부동 소수점을 사용한다는 것입니다.
그만큼 TextRenderer 클래스 이 목적을 위한 것이며 실제 크기로 작동합니다.이것 좀 봐 msdn에서 링크 이것을 사용하는 연습을 위해.
추가 StringFormat.GenericTypographic
문제를 해결할 것입니다:
graphics->MeasureString(L"PP", 1, font, width, StringFormat.GenericTypographic);
동일한 속성을 적용합니다. DrawString
.
이 KB 기사에 따르면 힌트에 연결될 수도 있는 것 같습니다. GDIPlus와 GDI로 그릴 때 텍스트가 다르게 나타나는 이유
TextRenderer는 글꼴 크기를 가져오는 데 유용했습니다.그러나 그리기 루프에서 TextRenderer.DrawText를 사용하는 것은 graphic.DrawString()에 비해 엄청나게 느렸습니다.
문자열의 너비가 문제이므로 TextRenderer.MeasureText와 Graphics.DrawString을 조합하여 사용하는 것이 훨씬 좋습니다.