エディットボックスをくぼませる

[戻る]
ラファエル 2006/07/08(土) 18:31:05
こんにちは。
WindowsXP/VisualC++6.0にて開発を行っております。

ダイアログに貼り付けたときにできるエディットボックスはくぼんでいるのに、
CEditのCreate関数で作成したエディットボックスはくぼんでいません。

エディットボックススタイルも調べてみましたが、
それに該当するようなスタイルはありませんでした。

もし、エディットボックスをくぼませる方法がありましたら、
教えて頂けないでしょうか。

瀬戸っぷ [E-Mail] 2006/07/08(土) 21:20:09
> ダイアログに貼り付けたときにできるエディットボックスはくぼんでいるのに、
> CEditのCreate関数で作成したエディットボックスはくぼんでいません。

WS_EX_CLIENTEDGEでは?
リソースファイルで確認すると付いていませんか?

CEdit::Create()で作っただけの場合、このスタイルは付かないので、
その後でModifyStyleEx()すればよろしいかと。

ラファエル 2006/07/09(日) 00:20:17
瀬戸っぷ様ご返答ありがとうございます。

下記の通りにやってみたのですが、何故かくぼんでくれません。

Edit.Create(WS_VISIBLE | WS_CHILD, CRect(10, 10, 100, 50), this, 1);
Edit.ModifyStyleEx(0, WS_EX_CLIENTEDGE);

コンパイルエラーもありませんし、何も問題ないように思えるのですが、
何か間違っているのでしょうか?

瀬戸っぷ [E-Mail] 2006/07/09(日) 00:46:48
> 下記の通りにやってみたのですが、何故かくぼんでくれません。
> Edit.Create(WS_VISIBLE | WS_CHILD, CRect(10, 10, 100, 50), this, 1);
> Edit.ModifyStyleEx(0, WS_EX_CLIENTEDGE);
> コンパイルエラーもありませんし、何も問題ないように思えるのですが、
> 何か間違っているのでしょうか?

CWnd::ModifyStyleEx()とCWnd::ModifyStyle()は
APIのSetWindowLong()を使用して設定されます。
そして、SetWindowLong()をMSDNで調べると…
>ウィンドウデータの中には、キャッシュされており、SetWindowLong 関数を使って変更
しても
>SetWindowPos 関数を呼び出すまでは有効にならないものもあります。
>特に、フレームスタイルを変更した場合は、SWP_FRAMECHANGED フラグを
>セットして SetWindowPos 関数を呼び出すさなければ、
>キャッシュが正しく更新されません。
とあります。
よって、
Edit.ModifyStyleEx()の第3引数にSWP_FRAMECHANGEDを渡す必要があります。

ラファエル 2006/07/09(日) 02:09:39
[[解決]]
ご指摘通り第3引数にSWP_FRAMECHANGEDを加えてみたところ、
くぼみを付けることができました。

瀬戸っぷ様、本当にありがとうございます。

古いスレッドには追加発言できません。