У меня есть следующий код:
public void DrawLetter(int Cell, string Letter, int X, int Y)
{
System.Drawing.Font fBody = new System.Drawing.Font("Courier New", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
Pencil.DrawString(Letter, fBody, System.Drawing.Brushes.Black, X, Y);
Pencil.DrawRectangle(new Pen(System.Drawing.Brushes.Red), X, Y, 10, 10);
}
Когда я повторяю это дважды и использую 140,249 и 296,249 в качестве координат, прямоугольник появляется так, как я и ожидал в правильной позиции, но строка появляется на несколько пикселей, и я не могу понять, почему.
Я вставил DrawRectangle, чтобы убедиться, что он запускается в правильном положении, и это так. Я делаю что-то не так в DrawString? Также, если я нарисую D и Z, ширина D будет 10px, а Z равна 8px, я подумал, что с помощью Courier это даст мне фиксированную ширину?
ОБНОВЛЕНИЕ: Я посмотрел образец на MSDN и вот скриншот. Даже если DrawString расположен в 0,0, вы можете видеть, что буква не появляется в 0,0. Прямоугольник, хотя. Там должно быть дополнение или что-то:
ОБНОВЛЕНИЕ 2: Использование следующего кода, кажется, улучшает ситуацию, хотя и не идеально:
StringFormat strFormat = new StringFormat(StringFormat.GenericTypographic);
Pencil.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
Pencil.DrawString(measureString, stringFont, Brushes.Black, new PointF(0, 0), strFormat);