文字列を全体的に中央に表示

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

文字列を全体的に中央に表示

#1

投稿記事 by 文字の表示位置 » 16年前

文字列を全体的に中央に表示する関数を作っております。
// 定義されてます
WIN_W = 640
FONT_SIZE 16
str[128] = "ここが動的に変わります。主に2バイト文字"
int str_l = strlen(str);	// 文字の長さ
Px = (WIN_W-(str_l/2 * FONT_SIZE))/2;
これでTextOutなどでPxを渡して表示すると
文字数が少ないと中心に見えるのですが
多くなると左にずれていってしまいます。

説明がわかりにくいのですが
イメージとしてはワード等の周王よりみたいな機能を作っております。

Justy

Re:文字列を全体的に中央に表示

#2

投稿記事 by Justy » 16年前

 環境不明で、しかも「ワード等の周王より」というのがどうにも意味不明なので
望んだ回答である自信はありませんが、

GetTextExtentPoint32
ttp://msdn.microsoft.com/en-us/library/ms901137.aspx
ttp://msdn.microsoft.com/ja-jp/library/cc410400.aspx

この関数を使って計算すれば、出来るかもしれません。

 あ、但し strの型が charであるなら、GetTextExtentPoint32Aとしてください。

 ついでに言えば WIN_Wがウインドウの横幅のつもりであるなら、
決めうちせずに GetClientRect()で取得した方が大きさが変わっても
正しく処理できるようになるはずです。

文字の表示位置

Re:文字列を全体的に中央に表示

#3

投稿記事 by 文字の表示位置 » 16年前

すいません。
環境を書いていませんでした
環境はWindowsAPIとC++です。

誤字で申し訳ないです。
周王ではなく中央にです。

BOOL GetTextExtentPoint32

となっているのですが戻り値は2種類しか返らないのに
文字のサイズを取得できるのでしょうか?

参考になるのかわからないのですが
http://www.youtube.com/watch?v=RAUwNxA5 ... 1&index=19
こういうかんじのメッセージを1行でだしたいんです。

MNS

Re:文字列を全体的に中央に表示

#4

投稿記事 by MNS » 16年前

BOOL GetTextExtentPoint32(
  HDC hdc,           // デバイスコンテキストのハンドル
  LPCTSTR lpString,  // 文字列
  int cbString,      // 文字列内の文字数
  LPSIZE lpSize      // 文字列のサイズ
);
とありますので、
SIZE構造体を作って、そのポインタをlpSizeに渡せば良いのではないでしょうか?
参考:http://wisdom.sakura.ne.jp/system/winap ... in133.html

文字の表示位置

Re:文字列を全体的に中央に表示

#5

投稿記事 by 文字の表示位置 » 16年前

すみません。
できました~

皆様ありがとうございます。

閉鎖

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