田中といいます.
文字列(複数行)を画面の中央に描画する方法なんですが
2点教えていただきたいことがあります.
HELPや書籍で調べたところ
CDC::DrawTextで指定した領域に文字列を描画できるということで
使ってみました.
①第3引数でDT_WORDBREAKと指定してやれば、文字列が領域より大きいと
自動的に改行されて描画するとのことですが
全角文字だったら、改行されたのですが、半角文字の場合
改行されずに、改行指定しないと改行されませんでした.
半角文字の途中では自動改行されることはないのでしょうか?
②第3引数でDT_CENTERを指定すれば、水平方向に中央揃えができたのですが
垂直方向では、できません・・・
DT_VCENTERを指定すれば、垂直方向に中央揃えができるようですが
DT_SINGLELIN指定で1行に設定にする必要があるので、
どうすれば、実現できるのでしょうか?
①、②それぞれ、実現できる方法があるのでしたら
ご指導のほどよろしくお願いします.
1の方は半角空白があればそこを折り返して良い位置として判定して
折り返してくれるようです
おそらく横幅より長い単語(もしくは全てがつながっている)だと
折り返してくれないのではないかと思います
全角の場合は1文字単位であれば、どこでも折り返して良い位置と判定して
折り返しているのだと思います
2は知らないです
結局、GetTextExtent()を使うしかないのかな?
(2)について。
DrawTextをDT_CALCRECTフラグをつけて呼び出すと、
実際に描画に必要な矩形を返してくれるので、
その矩形が描画範囲の中央に来るように再計算して、
再度DrawTextします。
田中です。
①に関しての自己レスです.
DrawTextの第3引数の設定でDT_EDITCONTROLを指定してやれば
解決されました.
現在このことについてバグがないか調べてますが
大丈夫だと思う.
あとは②の垂直方向の件だ
田中です
kuさん、dairygoodsさん、ありがとうございます.
DrawTextをDT_DT_EDITCONTROL | DT_CALCRECT | DT_WORDBREAK
フラグをつけて呼び出し
返ってきた矩形を描画範囲の中央に来るように再計算して、
DrawTextしたらできました.
ありがとうございました.