-1

フォームに TextBox があり、以下のように文字列を描画しています。

Font myFont = new Font("Arial",18F,FontStyle.Regular,GraphicsUnit.Point,128);
Graphics g = myTextBox.CreateGraphics();
Brush b = new SolidBrush(Color.Red);
g.DrawString("Item Drawn with DrawString",myFont ,b,new PointF(1,1));

TextBox に表示される文字列。次に、以下のコードを試しました

 Font myFont = new Font("Arial",18F,FontStyle.Regular,GraphicsUnit.Point,128);
 Graphics g = myTextBox.CreateGraphics();
 TextRenderer.DrawText(g,"Item Drawn with DrawText",myFont,new Point(1,1),Color.Red);

ここで問題が発生します。2 つの方法g.DrawString()TextRenderer.DrawText()同じフォントを使用していても、フォント スタイルに違いがあります。つまり、一部の文字が異なる方法でレンダリングされます。フォントで「128」の代わりに「1」を使用すると、両方の方法で文字が一意にレンダリングされます。

GdiCharSet(128)メソッドの使用中にフォントの値を変更してg.DrawString()も効果はありません。私の質問は、なぜ メソッドが値g.DrawString()を除外するのですか?GdiCharSet

4

1 に答える 1

0

このため:

gdiCharSet パラメーターは、Windows SDK ヘッダー ファイル WinGDI.h で定義されているリストから値を取得します。Windows フォーム アプリケーションは TrueType フォントをサポートし、OpenType フォントのサポートは限定されています。アプリケーションを実行しているマシンにインストールされていない、またはサポートされていないフォントが familyName パラメーターで指定されている場合は、Microsoft Sans Serif が代わりに使用されます。

( MSDN のドキュメントから)

Arial は TrueType フォントであり、Unicode をサポートしているため、私の知る限り、GDI Char Set を設定する必要はありません。

于 2013-03-07T07:10:55.073 に答える