トップページ > プログラム > 2016年02月22日 > e00mKUAj

書き込み順位&時間帯一覧

22 位/192 ID中時間01234567891011121314151617181920212223Total
書き込み数1000000000000002000000003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Win32API質問箱 Build122

書き込みレス一覧

Win32API質問箱 Build122
88 :デフォルトの名無しさん[sage]:2016/02/22(月) 00:01:15.97 ID:e00mKUAj
>>86
お返事ありがとうございます。何とか解決しました。

>>85を具体的に説明しますと、ダイアログベースで作ったメインのオーバーラップウィンドウにいくつか
コントロールが配置されていて、あるボタンを押すとダイアログのある範囲のデザインを変更すべく、
別の子ウィンドウスタイルのダイアログが上に表示されます。

これまでは>>85の解釈が正解であれば、HWND_BOTTOMでZオーダーの最後にすることにより前面に来るような挙動をしています。

ここで子ダイアログにWS_CLIPSIBLINGSを指定して、SetWindowPosでHWND_TOP、HWND_BOTTOMとも試してみましたが、
親ダイアログ内の重なり合うコントロールより上には正しく表示されません。

親ダイアログ内の重なり合うコントロールにもWS_CLIPSIBLINGSを付与してみると、今度はSetWindowPosでHWND_TOPを
指定すると当初の希望通りに前面に子ダイアログが表示されました。
HWND_BOTTOMを指定すると、今度は一番下になりました。

これで解決に見えますが、最後に質問です。

親ダイアログ内の重なりあるコントロールにWS_CLIPSIBLINGSを付与しましたが、VSのダイアログエディタでは操作できないので
プログラムでわざわざ付与しています。
ダイアログベースの場合、ここまでしなければいけないものでしょうか?
Win32API質問箱 Build122
99 :デフォルトの名無しさん[sage]:2016/02/22(月) 15:31:52.54 ID:e00mKUAj
85です。

>>93
そのようにする場面もあるのですが、今回は注意喚起の表示という仕様のため、条件を満たすまで
今回の子ダイアログは表示しっぱなしだけど他のコントロールは操作できるようになります。
なので、見た目はポップアップぽいけどフォーカスは奪わないし親ウィンドウの移動にも追随する
という感じになります。

>>95
どうやらそのようですね。
保守性がよろしくないので、一旦元の形に戻してしまいました。
下に続きます。

>>94,96
結論から書くと、WS_CLIPCHILDRENでうまく行きそうです。

ただ、WS_CLIPCHILDRENのみを付与しても目的の動作にはなりませんでした。
この場合、コモンコントロールが混じってると親と子ダイアログの前後関係がさらにおかしくなりました。
親ダイアログに配置されているコモンコントロールが常に子ダイアログより前面に来てしまいます。
なおかつ、その状態で子ダイアログに配置されているコントロールのみ、前面に表示されます。
(子ダイアログ本体の枠や背景のみが後ろになる)
SetWindowPosでHWND_TOPやHWND_BOTTOMを付与しても変化ありませんでした。


長いので区切ります
Win32API質問箱 Build122
100 :デフォルトの名無しさん[sage]:2016/02/22(月) 15:32:18.37 ID:e00mKUAj
諦めかけましたが、試行錯誤の結果、次のようになりました。

親ダイアログ:WS_CLIPCHILDRENを付与
子ダイアログ:WS_CLIPSIBLINGSを付与
子ダイアログ表示時のSetWindowPosのフラグ:HWND_TOP
リソースを直接編集したり、ソースレベルでWS_CLIPSIBLINGSを各コントロールに付与しない。

これで完全に意図した動作となりました。

ただ、これは大したことは無いですが、親ダイアログで使っているグループボックスはすべて透過指定を
しなければグループ内部が真っ白になります。
通常、これをしなくとも透過したような表示なるコントロールですが、WS_CLIPCHILDRENを使う場合は
これも忘れてはいけないことなります。

うっかり忘れそうな約束事なので、ウィンドウスタイルや透過など一切気にしなくていい>>85の作りの方が
気楽ではありますが...

皆さんありがとうございました。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。