- ベストアンサー
WindowsAPIで
テキストボックスを ES_RIGHT のウィンドウスタイルでクリエイトすれば文字が右そろえになりますが 文字を右そろえにしたり左そろえにしたりしたいのですが SendMessageでできないでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
RECT rc; GetClientRect(hwnd, &rc); SetWindowLong(hedit, GWL_STYLE, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT); InvalidateRect(hwnd, &rc , TRUE); こんなんでどうでしょうかね。おいらにはできたよ。 (。。)v
その他の回答 (4)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>NULLでなく領域を指定すればできるのですね NULLでもいくのでは? >style ^= ES_RIGHT; ここの意味が理解できていないだけかと。 #2の方のサンプルはES_RIGHTから指定無し(左寄せ)へのサンプルです。 #define ES_LEFT 0x0000L #define ES_CENTER 0x0001L #define ES_RIGHT 0x0002L なんで、ES_RIGHTを外せば、左寄せに。
お礼
ありがとうございます 次回やってみます
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>質問の意味はクリエイトでなく例えばセンドなどで左右そろえを動的にできないかどうかという事でした ですから、スタイルとメッセージはぜんぜん別物なんですって。 >ES_は質問の意味を明白にするためについでに書いたものでそれにこだわらなくてもいいのです こだわるも何も、スタイルを変更するんだからSetWindowLongでGWL_STYLEなんですよ。 ES_??と、EM_??と、EN_??。 いずれもエディットボックスに関する定数ですけど、意味もなくSとかMとかNとかついているわけではありません。 Style、Message、Notifyなんですから。
お礼
ありがとうございます 動的にはSetWindowLongではうまく行きませんでした
- supersonic
- ベストアンサー率52% (57/109)
SendMessageでは対応するメッセージが無いみたいです。 SetWindowLongでウィンドウスタイルを変えてやればできますがダメですか? こんな感じで。 DWORD style = GetWindowLong(hWnd,GWL_STYLE); style ^= ES_RIGHT; SetWindowLong(hWnd, GWL_STYLE, style); InvalidateRect(hWnd, NULL, TRUE); //無効領域にして再描画させないとすぐに反映されないみたい *hWndはEditボックスのウィンドウハンドルです。
お礼
ありがとうございます どうも動的には変化しないみたいです InvalidateRectでも駄目でした
- taka_tetsu
- ベストアンサー率65% (1020/1553)
ES_???はスタイル。メッセージではありません。 って前にも書いたような。 スタイルを変えるのはSetWindowLong()です。 ただし、動的に変更できないものもあるので ES_RIGHTが変えられるかどうかは未確認です。
お礼
ありがとうございます 質問の意味はクリエイトでなく例えばセンドなどで左右そろえを動的にできないかどうかという事でした ES_は質問の意味を明白にするためについでに書いたものでそれにこだわらなくてもいいのです
お礼
ありがとうございます 2つエジットボックスを作って切りかえる形にしてしまったので様相が大きく変わってテストが大変でせっかくの回答検査できなくなってしまいました しかし同じような場面が再び出てきたら使わさせていただきます NULLでなく領域を指定すればできるのですね