ページ 11

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

Posted: 2009年6月07日(日) 13:46
by 文字の表示位置
文字列を全体的に中央に表示する関数を作っております。
// 定義されてます
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を渡して表示すると
文字数が少ないと中心に見えるのですが
多くなると左にずれていってしまいます。

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

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

Posted: 2009年6月07日(日) 15:28
by Justy
 環境不明で、しかも「ワード等の周王より」というのがどうにも意味不明なので
望んだ回答である自信はありませんが、

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:文字列を全体的に中央に表示

Posted: 2009年6月07日(日) 15:56
by 文字の表示位置
すいません。
環境を書いていませんでした
環境はWindowsAPIとC++です。

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

BOOL GetTextExtentPoint32

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

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

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

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

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

Posted: 2009年6月07日(日) 22:08
by 文字の表示位置
すみません。
できました~

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