自分が欲しかったラッパー関数です
一応上手くいってるようですが
ミスがあればどなたか添削をお願いします
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()だけを使えば早いですけど
行ごとの特殊処理(「〇行目を非表示」「〇行目のフォントや色を変える」等)をやりたい場合に改造しやすいように処理を統一してます