2010年7月22日木曜日

悪魔の布告

 備忘録、及び同じことで行き詰ってしまっている人が検索で辿り着けば……と思ってここに残しておきます。
 LogFontを使用して「DrawString」を行う際の注意点。


 回転した文字を表示したくて(説明しにくいですが、要は文字が書かれた紙を、賞状を渡すときにみたいにくるっと回して相手向きにした常態の文字)、LogFontを使用していたのですが、全部で7個ほど描画するうちの5つほどがうまく表示されない。
 最初は文字位置の指定が描画領域の範囲外になっていたりしたのかなーと思ってました。文字を反転すると描画開始位置で指定する座標も反転するのです。(通常なら左上隅の0,0座標からですが、反転すると基本は右下の隅の座標)
 ところがそこを直してもうまくいかない。はて、描画領域が小さいのに文字のサイズが大きすぎたかな……とか色の指定が背景と同じになっちゃってるかなとか宣言失敗してNullってんのかなとか色々調べましたが、原因が掴めない。
 あきらめかけたところで改めてDrawStringの構文を見直していたのですが、表示に成功しているところと別のところで何か変な違いがあることに気付きました。

失敗してたほう:
lg_Grapphics.DrawString("文字列", lf_LogFont, Brush, x, y)

成功してるほう:
lg_Grapphics.DrawString("文字列", lf_LogFont, Brush, x, y, New StringFormat((StringFormatFlags.NoWrap Or StringFormatFlags.NoClip)))


 違いは一目瞭然。引数の最後、フォーマット指定を省略していたかどうか、の違いがありました。
 いやこれは違うだろーと冗談半分に追記してやり直してみたところ、これで直りました_| ̄|○
 理由はわかりませんが、どうやらLogFontを使うときはフォーマットも指定しないと駄目なようですね……。自分はこれだけのことで数日間ほど悩み続けてました……。

 もしLogFontを使っての描画がうまくいっていない人がここを見かけていたら、一度確認してみてください。


-------------------------------------------------------------------------------------

グレヴェン・イル=ヴェクは、ヴァティの体を持ち上げた。
「さあ、落ちる間にお前の失敗について考える時間があるだろうよ」

0 件のコメント:

コメントを投稿