文字描画で改行・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mi_l

文字描画で改行・・・

#1

投稿記事 by mi_l » 12年前

度々失礼します。

トピックを細かく小分けしています

前回
前々回

の続きなので・・・

今回やりたいのは自動改行、また、改行させる方法です。

前回は文字描画まではいきました。

そして次に、200x200の画像の上から文字を描画しました。

例えば、(100 , 100)の位置に200x200の適当な画像を貼ります。

そして、その画像の上である(110 , 120)の位置から読み込んだ文字を描画しました。

普通に描画はできましたが、文字数が多く画像からはみでてしまいました。


読み込むテキストファイル(その1)

コード:

ここは・・・・・・・・・・・・・・・県立・・・・・・・・・・・・・・・・・・・・高校です。
案の定画像外の黒い所まで描画されてしまいます。(背景は真っ黒です)

当たり前だとは思うのですが、これを改行させるやり方とかあるのでしょうか?
所定のx座標までいったら改行

例、x座標が280より大きくなったら110に戻してy座標に50を足す・・・的な・・・

もしくは(その2)

コード:

ここは
・・・・・・・・・・・・・・・県立
・・・・・・・・・・・・・・・・・・・・高校です。
と、テキストファイルで改行してしまって無理やり幅を狭くするしかないのでしょうか?


(その2)の描画の仕方の方が綺麗だとは思いますが、今回は改行できればさせたいだけですので、2行になろうと3行になろうと構いません。

要は、(その2)のテキストファイルでは「ここは」の後に無駄なスペースができてしまいます。これを阻止したいのです。

テキストファイルを(その3)

コード:

ここは・・・・・・・・・・・・・・・・・
・・・・・県立・・・・・・・・・・・・・
・・・・・・・・・・・・・・高校です。
というようにやってしまうとすごく変な感じになります。


ご教授お願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字描画で改行・・・

#2

投稿記事 by softya(ソフト屋) » 12年前

文字列を与えれば、幅を調べる事はできます。
あとはルールを作って、適当な幅になるように毎回文字列を組み立てて幅を知らべてやって、改行も自分で制御していやるだけです。
ただ、そのルールが明確じゃないと出来ないです。
※ 現状mi_lさんが書いているのは、明確なルールに見えません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mi_l

Re: 文字描画で改行・・・

#3

投稿記事 by mi_l » 12年前

返信ありがとうございます。

とりあえず助言された通りに考えながらやってみたいと思います。
softya(ソフト屋) さんが書きました: ※ 現状mi_lさんが書いているのは、明確なルールに見えません。
あたりまえです。
どうすればよいかわからずに質問している私が明確なルールなんて決めているはずありません。

これから決めていきたいと思います。


詰んでしまったらもう一回質問したいと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字描画で改行・・・

#4

投稿記事 by softya(ソフト屋) » 12年前

> どうすればよいかわからずに質問している私が明確なルールなんて決めているはずありません。

こちらからは、mi_lさんがどうしたいのか分からないと言うことです。
正解が有る問題でもないので、mi_lさんの理想がわからない以上は答えようがないと思ってください。
「なんとなく、うまく行きませんか?」ではルールを決めようがないのです。
何を条件に改行されて、何を条件に前の空白の幅を決めるのでしょう? 
mi_lさんの理想を教えて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mi_l

Re: 文字描画で改行・・・

#5

投稿記事 by mi_l » 12年前

mi_l さんが書きました:当たり前だとは思うのですが、これを改行させるやり方とかあるのでしょうか?
所定のx座標までいったら改行

例、x座標が280より大きくなったら110に戻してy座標に50を足す・・・的な・・・
一応ここが改行のルール?なのですが・・・

描画の際にはこのようなことは計算していないと思いますので・・・訊いたのです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字描画で改行・・・

#6

投稿記事 by softya(ソフト屋) » 12年前

ざっとこんな感じですか。
(1)出力文字列バッファに元の文字列から次の一文字追加。
(2)出力文字列バッファのドット幅をGetDrawStringWidthで調べる。
(3)幅が(280-先頭x)をオーバーしていたら、この出力文字列バッファを(先頭x,表示y) で表示する。先頭x+=50、表示y+=16、出力文字列バッファを空に。
(4)元の文字列が無くなるまで(1)へ戻る。
(5)出力文字列バッファの入っていた内容を(先頭x,表示y) で表示する。 

【補足】 ちなみに依頼されたとおりに書きましたが、毎行xを+50して良いのか判断に迷いました。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mi_l

Re: 文字描画で改行・・・

#7

投稿記事 by mi_l » 12年前

そのような感じです!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字描画で改行・・・

#8

投稿記事 by softya(ソフト屋) » 12年前

私からは以上なのですが、これで実装してみてください。と言うより練習のために実装すべきだと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る