トップページ > 記事閲覧
文字列を左揃え、中央揃え、右揃えを選んで描画できる関数
名前:へけぽん 日時: 2021/11/16 18:17

自分が欲しかったラッパー関数です 一応上手くいってるようですが ミスがあればどなたか添削をお願いします void DrawNStringToHandle_Align(int Align,int x, int y, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 ){ // Align が 0左寄り 1中央寄り 2右寄り if( Align < 0 ){ Align = 0; } if( Align > 2 ){ Align = 2; } size_t StrLen = strlenDx( String );//全体の文字数を得る int sizex;int sizey;int LineCount;//描画した時のサイズと行数を調べる GetDrawStringSizeToHandle( &sizex, &sizey, &LineCount, String, StrLen, FontHandle, FALSE ); const TCHAR *last = String + StrLen;//終端を得る const TCHAR *next;//次の改行ポイント int LineSpace = GetFontLineSpaceToHandle( FontHandle );//一行の縦幅を得る int StrWidth;//一行の横幅 size_t CharCount = 0;//描画した文字数をカウント for(int i=0;i<LineCount;i++){//行数分、繰り返す next = strstrDx( String, "\n" );//次の改行ポイントを探す if( next==NULL ){ next = last;}//改行が見つからない場合は最終行ということなので終端を代入 StrLen = next - String;//この行の文字数を得る StrWidth = GetDrawNStringWidthToHandle( String, StrLen, FontHandle, FALSE );//この行の横幅を得る if( CharCount < StringLength ){//描画した文字数がまだ指定範囲を超えていない場合 CharCount += StrLen;//この行の文字数を足す if( CharCount > StringLength ){//この行の中に指定した終端がある場合 StrLen -= ( CharCount - StringLength );//差分を引いて文字数を調整 } DrawNStringToHandle( x + ( ( Align * ( sizex - StrWidth ) ) /2 ), y, String, StrLen, Color, FontHandle, EdgeColor, FALSE );//x座標を調整して一行分描画する } CharCount += 1;//改行文字の分 String = next + 1;//次の行の先頭にする(+1は改行文字の分) y += LineSpace;//y座標をずらす } } 左寄りの場合は普通にDrawNStringToHandle()だけを使えば早いですけど 行ごとの特殊処理(「〇行目を非表示」「〇行目のフォントや色を変える」等)をやりたい場合に改造しやすいように処理を統一してます
メンテ

Page: 1 |

Re: 文字列を左揃え、中央揃え、右揃えを選んで描画できる関数 ( No.1 )
名前:管理人 日時:2021/11/18 13:03

ソースを拝見したり、実行してみたりした限りでは問題点は無いと思います Align の値によって処理を分岐するのではなく、単純に乗算するだけなのが良いですね (^ ^
メンテ
Re: 文字列を左揃え、中央揃え、右揃えを選んで描画できる関数 ( No.2 )
名前:へけぽん(解決) 日時:2021/11/18 18:06

管理人さんありがとうございます ライブラリの製作者様本人から 問題ないだろうとの言葉を貰えたので とても安心できました 今までは自分の作っているゲームの仕様に合わせて力技で実現した関数を使っていたのですが どうにも汎用性が低く、不便を感じていましたし 今後、別のゲームを作る時にも流用出来るようにと 改めてDxライブラリにある機能だけで実装しようと試みた結果です 文字列は可変長配列が基本なので 初心者だった自分にはやたらハードルが高かったのですが 色々やっていくうちに自分にも出来ることが増えたなぁと感慨深いです コメントありがとうございました
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存