どんな文字列も必ず中央に表示する

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

どんな文字列も必ず中央に表示する

#1

投稿記事 by 研究生 » 15年前

どんな長い文字列でも中央に表示できるように
文字数とFONT_SIZEから表示位置xを求めたいです。

FONT_SIZEはSetFontSize(FONT_SIZE);で指定した値です。

int x =(640-strlen(mess)/2*FONT_SIZE-FONT_SIZE)/2;
DrawFormatString(x,420,GetColor(255,255,255),"%s",mess);//disp配列の文字データを表示

どのようにすればよいのでしょうか・・・・。

kazuoni

Re:どんな文字列も必ず中央に表示する

#2

投稿記事 by kazuoni » 15年前

関数DrawFormatStringを使っているので、DXライブラリと決め打ちして・・・
int CalcCenterX(int x1,int x2,const char *str)
{
    int StrLen,StrWidth;
    StrLen=(int)strlen(str);
    StrWidth= GetDrawStringWidth(str,StrLen);
    return (int)((x1+((x2-x1)/2))-(StrWidth/2));
}
<引数>
x1=描写枠の左端のx座標
x2=描写枠の右端のx座標
str=文字列

<戻り値>
描写するx座標

自分はこんな感じで使っていました。
同じようにy座標の中心も計算できますね。

研究生

Re:どんな文字列も必ず中央に表示する

#3

投稿記事 by 研究生 » 15年前

ご回答ありがとうございます。
すみません。使っているのはDXライブラリであっております。

上記の場合
x1=描写枠の左端のx座標
x2=描写枠の右端のx座標
がわかってないと出来なくはないでしょうか。

出来れば文字列を渡すだけで中心に表示したいです。

kazuoni

Re:どんな文字列も必ず中央に表示する

#4

投稿記事 by kazuoni » 15年前

> 出来れば文字列を渡すだけで中心に表示したいです。

中心とはどこからどこの中心でしょうか?
もし一定範囲の中心ならば、関数内でconst int型で範囲を定義すればよいと思いますが・・・

研究生

Re:どんな文字列も必ず中央に表示する

#5

投稿記事 by 研究生 » 15年前

画面のx軸(MAX640)の中心にしたいです。

例えば
「あ」という文字なら320-FONT_SIZE/2に表示といった感じです。
わかりにくくて申し訳ないです。
どんな文字の長さでも左右の中心に表示したいです。

kazuoni

Re:どんな文字列も必ず中央に表示する

#6

投稿記事 by kazuoni » 15年前

maxという意味がよくわからないのですが・・・
サイズは可変ではなく、WindowMode時の
クライアント領域のデフォルトサイズであるwidth=640の中心に
文字列を描写したいということでよろしいでしょうか?
int CalcCenterX(const char *str)
{
    const int x1=0;
    const int x2=640;
    int StrLen,StrWidth;

    StrLen=(int)strlen(str);
    StrWidth= GetDrawStringWidth(str,StrLen);
    return (int)((x1+((x2-x1)/2))-(StrWidth/2));
}

研究生

Re:どんな文字列も必ず中央に表示する

#7

投稿記事 by 研究生 » 15年前

ご回答ありがとうございます。
出来ました。助かりました。
ここの方は皆様親切ですね。

閉鎖

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