I次のコードを持っている:のDrawStringとDrawRectangleは異なる場所に同じX&Yスタートを使用して
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);
}
私は二回、この通過し、矩形が私は期待通りに表示された座標として140249と296249を使用します正しい位置が表示されますが、文字列は数ピクセルしか表示されず、なぜ動かすことはできません。
私は、DrawRectangleを正しい位置から開始していることを確認するために配置しました。私はDrawStringで何か間違っているのですか?また、私はDとZを描画する場合、Dの幅は10pxであり、Zは8pxです。Courierを使用すると固定幅になると思いますか?
更新:私はMSDNのサンプルを見て、ここではスクリーンショットです。 DrawStringは0,0に配置されていますが、文字が0,0に表示されないことがわかります。しかし、長方形はします。パディングか何かがあるに違いありません:
UPDATE 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);
MSDNのリンクによると、「MeasureStringメソッドは、個々の文字列で使用するように設計されており、文字列の前後に小さな余分なスペースが含まれているため、グリフがオーバーハングすることがあります。また、DrawStringメソッドは、グリフポイントを調整して表示品質を最適化し、MeasureStringによって報告された文字列よりも狭い文字列を表示することがあります。 'それで、文字列描画中にシステムオフセットがあるようです。 – Allender