ページ 1 / 1
文字列を全体的に中央に表示
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 文字の表示位置
すみません。
できました~
皆様ありがとうございます。