ウィンドウのZ順を手前から並べていきたい

解決


NOBUO  2006-07-08 07:40:14  No: 62477

ウィンドウのZ順を変更する際、
SetWindowPosでは「そのウィンドウの手前に」という指定しか無いようなのですが、
「そのウィンドウの直後に」という指定をする方法は無いのでしょうか?
直感的に「複数のウィンドウを番号順に整列させる」ということをしたいのです。

今思いついているのは
「逆の番号から順に手前に置き直していく」という方法なのですが、
これだと前面のウィンドウが何度も変わってしまいます。
とりあえず変な再描画も無く再整列はできているようなのですが、
本当にこれで問題無いのかなという疑問が残っています。

こういうふうにするしか無いのでしょうか?
それとも、「直後に」を指定する方法はあるのでしょうか?


dairygoods  2006-07-10 18:26:21  No: 62478

http://msdn.microsoft.com/library/ja/jpwinui/html/_win32_setwindowpos.asp

| hWnd 
| ウィンドウのハンドルを指定します。 
| hWndInsertAfter 
| Z オーダーを決めるためのウィンドウハンドルを指定します。hWnd で
| 指定したウインドウは、このパラメータで指定したウィンドウの後ろに
| 置かれます。

ヘルプを見る限り、hWnd が hWndInsertAfter の後ろに配置されるように
読めますけど、違うんでしょうか。


NOBUO  2006-07-11 06:48:42  No: 62479

> ヘルプを見る限り、hWnd が hWndInsertAfter の後ろに配置されるように
> 読めますけど、違うんでしょうか。

あ…、そういう意味だったのですか。
MFCの「Z 順でこの CWnd オブジェクトより前に配置される
CWnd オブジェクトを識別します」という文章を読んで、
思いきり勘違いしていました。
たしかに冷静に読み直すと、勘違いしていただけのようです。
大変申し訳ありませんでした。

ということは、逆に「一つ手前に」という方法が無いということなのでしょうか。
どちらにせよ、もし「番号順に奥から置いていく」ということを
やろうと思ったら、直感的にはいかないということなのですよね…。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加