複数行の文字列を描画する方法 – プログラミング – Home

複数行の文字列を描画する方法
 
通知
すべてクリア

[解決済] 複数行の文字列を描画する方法


田中美夕
 田中美夕
(@田中美夕)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

田中といいます.

文字列(複数行)を画面の中央に描画する方法なんですが
2点教えていただきたいことがあります.

HELPや書籍で調べたところ
CDC::DrawTextで指定した領域に文字列を描画できるということで
使ってみました.

①第3引数でDT_WORDBREAKと指定してやれば、文字列が領域より大きいと
 自動的に改行されて描画するとのことですが
 全角文字だったら、改行されたのですが、半角文字の場合
 改行されずに、改行指定しないと改行されませんでした.
 半角文字の途中では自動改行されることはないのでしょうか?

②第3引数でDT_CENTERを指定すれば、水平方向に中央揃えができたのですが 
 垂直方向では、できません・・・
 DT_VCENTERを指定すれば、垂直方向に中央揃えができるようですが
 DT_SINGLELIN指定で1行に設定にする必要があるので、
 どうすれば、実現できるのでしょうか?

①、②それぞれ、実現できる方法があるのでしたら
ご指導のほどよろしくお願いします.


引用未解決
トピックタグ
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

1の方は半角空白があればそこを折り返して良い位置として判定して
折り返してくれるようです
おそらく横幅より長い単語(もしくは全てがつながっている)だと
折り返してくれないのではないかと思います
全角の場合は1文字単位であれば、どこでも折り返して良い位置と判定して
折り返しているのだと思います

2は知らないです

結局、GetTextExtent()を使うしかないのかな?


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

(2)について。
DrawTextをDT_CALCRECTフラグをつけて呼び出すと、
実際に描画に必要な矩形を返してくれるので、
その矩形が描画範囲の中央に来るように再計算して、
再度DrawTextします。


返信引用
田中美夕
 田中美夕
(@田中美夕)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

田中です。
①に関しての自己レスです.
DrawTextの第3引数の設定でDT_EDITCONTROLを指定してやれば
解決されました.
現在このことについてバグがないか調べてますが
大丈夫だと思う.

あとは②の垂直方向の件だ


返信引用
田中美夕
 田中美夕
(@田中美夕)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

田中です

kuさん、dairygoodsさん、ありがとうございます.
DrawTextをDT_DT_EDITCONTROL | DT_CALCRECT | DT_WORDBREAK
フラグをつけて呼び出し
返ってきた矩形を描画範囲の中央に来るように再計算して、
DrawTextしたらできました.

ありがとうございました.


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました