こんにちは。
WindowsXP/VisualC++6.0にて開発を行っております。
ダイアログに貼り付けたときにできるエディットボックスはくぼんでいるのに、
CEditのCreate関数で作成したエディットボックスはくぼんでいません。
エディットボックススタイルも調べてみましたが、
それに該当するようなスタイルはありませんでした。
もし、エディットボックスをくぼませる方法がありましたら、
教えて頂けないでしょうか。
> ダイアログに貼り付けたときにできるエディットボックスはくぼんでいるのに、
> CEditのCreate関数で作成したエディットボックスはくぼんでいません。
WS_EX_CLIENTEDGEでは?
リソースファイルで確認すると付いていませんか?
CEdit::Create()で作っただけの場合、このスタイルは付かないので、
その後でModifyStyleEx()すればよろしいかと。
瀬戸っぷ様ご返答ありがとうございます。
下記の通りにやってみたのですが、何故かくぼんでくれません。
Edit.Create(WS_VISIBLE | WS_CHILD, CRect(10, 10, 100, 50), this, 1);
Edit.ModifyStyleEx(0, WS_EX_CLIENTEDGE);
コンパイルエラーもありませんし、何も問題ないように思えるのですが、
何か間違っているのでしょうか?
> 下記の通りにやってみたのですが、何故かくぼんでくれません。
> 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を渡す必要があります。
ご指摘通り第3引数にSWP_FRAMECHANGEDを加えてみたところ、
くぼみを付けることができました。
瀬戸っぷ様、本当にありがとうございます。