WindowsCE5.0/EMbeddedVC++4.0SP4/SDK(MFC未使用)にて開発
お世話になります。
STATICコントロールのSS_NOTIFY設定を条件により有効にしたり
無効にしたりと制御で切り替えるにはどうしたらよいのでしょうか?
・STATICコントロールは反転表示し、オプションボタンのように使用しています。
・場合によりコントロールの入力を無効にしたいので、
現在はリソースエディタで「通知」にチェックをいれて(初期値:SS_NOTIFY)
メッセージ処理のなかで、無効にしたい条件のときに表示を反転したりしています。
メッセージが来てから判定するのではなく、SS_NOTIFY設定したり解除する方が
制御が少なくてすむのですが、具体的なやり方が見つけられません。
よろしくお願いします。
具体的に何をどうしているのか想像が付かない文章だけど
とりあえず SS_NOTIFY のつけはずしするだけなら、これは WindowStyle なので
MFC でいうところの CWnd::ModifyStyle でできる。
んで、こいつの詳細実装は GetWindowLong/SetWindowLong で GWL_STYLE だ。
俺の手元に WindowsCE は無いので動作検証はしていないけど。
CEだとSetWindowLongPtr()の方かも。
∵関係ないけど、PC変わりましたm(__)m。
ウインドウスタイルの値はSS_NOTIFY等の値が
単独で設定されているわけでは無いので注意して下さい。
CreateWindowのdwStyleの説明を見るとわかりますけれど、
ウインドウスタイルの値は幾つかの意味合いを持つ値のORを取った値に
なっています。単純に0を設定したりすると他の値も全部消えてしまうので
一度、現在の値を取得した後にSS_NOTIFYに相当する部分だけを変更して
変更後の値を設定しなおす必要があります。
ビットフィールドの操作になるので注意が必要です。
あと、SS_NOTIFYが該当するかは確認していませんが、
場合によってはCreateWindowの時にしか設定できない物もあります。
ウインドウスタイルの全てが変更可能と言うわけでは無いので
注意をしてください。
みなさま アドバイスありがとうございます。
>一度、現在の値を取得した後にSS_NOTIFYに相当する部分だけを変更して
>変更後の値を設定しなおす必要があります。
>ビットフィールドの操作になるので注意が必要です。
なるほど、このようにすればよいのですね。
>あと、SS_NOTIFYが該当するかは確認していませんが、
>場合によってはCreateWindowの時にしか設定できない物もあります。
この部分が気になっていて、手段があるのかなと思っていました。
試してみるしかないですね。
改めまして、ありがとうございました。