내 문제 :
현재 한 줄에 여러 텍스트 (각각 글꼴이 다를 수 있음)를 표시하는 사용자 지정 사용자 정의 컨트롤을 만들고 있습니다. 나는 모든 공통 부분의 텍스트를 정확히 일치 함께 정렬하고 싶습니다. 예를 들어 내가 직접이 작업을 수행 할 수있는 GDI + 기능을 발견하지 않았기 때문에GDI +를 사용하여 공통 기준선을 따라 여러 가지 글꼴로 텍스트를 정렬하는 가장 쉬운 방법은 무엇입니까?
Hello, I am George.
------------------------------ <- all text aligns to a common baseline
^ ^ ^
| | |
Courier Arial Times <- font used for a particular bit of text
20pt 40pt 30pt
, 나는 (아래 설명) 내 자신의 방법을 함께했다. 그러나 :
이 작업을 수행하는 것이 더 쉬운 방법이 아닌지 궁금합니다.
내 현재의 접근 방식 :
1) 텍스트를 그리기에 사용되는 모든 System.Drawing.Font
의 목록을 수집합니다. 사용되는 모든 Font
초간
// variables used in code sample (already set)
Graphics G;
Font font;
...
// compute ratio in order to convert from font design units to pixels:
var designUnitsPerPixel = font.GetHeight(G)/
font.FontFamily.GetLineSpacing(font.Style);
// get the cell ascent (baseline) position in design units:
var cellAscentInDesignUnits = font.FontFamily.GetCellAscent(font.Style);
// finally, convert the baseline position to pixels:
var baseLineInPixels = cellAscentInDesignUnits * designUnitsPerPixel;
3)로서 최대 baseLineInPixels
값을 결정 : 각 Font
들어
2) 다음 코드를 사용하여, 픽셀 단위로 기준의 수직 위치를 찾을 이 값을 maxBaseLineInPixels
에 저장하십시오.
// variables used in code sample (already set):
Graphics G;
Font font;
string text;
...
// find out how much space is needed for drawing the text
var measureF = G.MeasureString(text, font);
// determine location where text will be drawn:
var layoutRectF = new RectangleF(new PointF(0f, 0f), measureF);
layoutRectF.Y += maxBaseLineInPixels - baseLineInPixels;
//^the latter value 'baseLineInPixels' is specific to the font used
// draw text at specified location
G.DrawString(text, font, Brushed.Black, layoutRectF);
내가 뭔가를 누락 또는 AM 정말 더 쉬운 방법이 없다 :
4)는 다음과 같은 방법으로 텍스트의 각 비트를 그립니다?
오늘과 어제를 통해 확인했습니다. 유일한 해결책 인 것 같습니다. Font.GetHeight (Graphics)는 픽셀이 아니라 Graphics 객체의 PageUnit에있는 값을 반환합니다. 저는 Bob Powell의 솔루션 (http://www.bobpowell.net/formattingtext.htm)을 사용하고 있습니다. 그의 코드 (글쎄, C#)의 마지막 코드 블록을 사용하고 밀리미터로 변환합니다. 공유 인쇄/그림/PDF 작성 루틴. – OregonGhost
의견에 감사드립니다. 나는 GDI +로 그려지는 텍스트가 사실 * 복잡하다는 것을 듣고 안심한다. 나는 이것을 상상하지 않고있다. 이후이 문제를 해결하고 WPF (GDI +는 더 이상 중요하지 않으며 일이 조금 더 쉬워 질 것입니다)로 이동하기로 결정했습니다. – stakx