C#のGraphicsにDrawStringというメソッドがあります。
文字を描画するメソッドになります。
Fontの設定で、FontStyleにStrikeoutというものがあり、取り消し線を描画することができます。それ以外にも太字やイタリックなどもできます。
通常はこれで問題ありません。ただし、前後に空白を入れた場合の動作が、半角目と全角文字で異なります。画像のようになってしまいます。
この画像の外の赤枠は、Graphics.MeasureStringを利用して取得した文字のサイズを基に描画しています。
色々と調べましたが、はっきりとした原因は、GDI+のDLLまで調べることができなかったので、わかりません。
ここからは推測になります。
StringFormatに、FormatFlagsがあり、StringFormatFlags.MeasureTrailingSpacesを加味しないで、取り消し線を描画しているのではないかと思われます。
StringFormatFlags.MeasureTrailingSpacesとは、行末の空白を含めるという設定になります。GDIでサンプルを作成したところ、特に問題なかったので、GDI+からの問題のように思います。
ちなみに、Excel2007で検証したところ、セルの文字はGDIのように描画されて、オートシェイプの文字は、GDI+のように描画されることがわかりました。
文字を描画するメソッドになります。
Fontの設定で、FontStyleにStrikeoutというものがあり、取り消し線を描画することができます。それ以外にも太字やイタリックなどもできます。
通常はこれで問題ありません。ただし、前後に空白を入れた場合の動作が、半角目と全角文字で異なります。画像のようになってしまいます。
この画像の外の赤枠は、Graphics.MeasureStringを利用して取得した文字のサイズを基に描画しています。
色々と調べましたが、はっきりとした原因は、GDI+のDLLまで調べることができなかったので、わかりません。
ここからは推測になります。
StringFormatに、FormatFlagsがあり、StringFormatFlags.MeasureTrailingSpacesを加味しないで、取り消し線を描画しているのではないかと思われます。
StringFormatFlags.MeasureTrailingSpacesとは、行末の空白を含めるという設定になります。GDIでサンプルを作成したところ、特に問題なかったので、GDI+からの問題のように思います。
ちなみに、Excel2007で検証したところ、セルの文字はGDIのように描画されて、オートシェイプの文字は、GDI+のように描画されることがわかりました。
※コメント投稿者のブログIDはブログ作成者のみに通知されます