TopMostウィンドウについて – プログラミング – Home

TopMostウィンドウについて
 
通知
すべてクリア

[解決済] TopMostウィンドウについて


いろは
 いろは
(@いろは)
ゲスト
結合: 21年前
投稿: 43
Topic starter  

いろはです。

ウィンドウに設定したTopMostを解除する時に不思議な現象が出ています。
たとえば、、
あるモードレスダイアログを2つ作成し、
SetWindowPos( &wndTopMost, ..., SWP_NOSIZE|SWP_NOMOVE );
と設定します。
その後、ボタン押下などで片方のTopMost属性を外すべく
SetWindowPos( &wndNoTopMost, ..., SWP_NOSIZE|SWP_NOMOVE );
としているのですが、属性を解除したくないダイアログについても
TopMostが解除されてしまいます。(Spyにより確認)

調べた所、同一プロセスのウィンドウすべてのTopMostが解除されてしまうようです。

環境は
 Win2000+VC6(MFC使用)
 WinXP+VC2004(.NET使用)
両方の環境で同じような現象になります。
Windowsのバグ?っと思うのですが、『そのやり方は間違ってるぞ』っと
言うような事を教えていただけないでしょうか?


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

ヘルプにこんなことが書いてあります。

SetWindowPos
http://www.microsoft.com/japan/msdn/library/ja/jpwinui/html/_win32_setwindowpos.
asp
| 最前面ウィンドウが非最前面ウィンドウになると、
| そのオーナーウィンドウとそれが所有するウィンドウも
| 非最前面ウィンドウになります。


返信引用
いろは
 いろは
(@いろは)
ゲスト
結合: 21年前
投稿: 43
Topic starter  

dairygoodsさん ありがとうございます。

なるほど。。
と言うか、ありえませんって、、
確かにそういったシチュエーションは少ないですが、言い切って欲しくないですね。。
実際そういう状況を求められているので…
重要なウィンドウだからこそ、TopMostにしているので、その辺は勝手に制御して欲しく無い。
っと愚痴ってみました。

理由がはっきりしてよかったです。
ありがとうございました。

で、解決チェックをしたいのですが、関連することなのでもう少しお付き合いください。
以降、.NETの話です。
Forms::TopMostを使ってTopMostを制御していますが、こちらも同様に、
他のウィンドウのTopMostをFalseに設定すると、WS_EX_TOPMOSTは外れてしまいます。
が、Forms::TopMostの値を見るとTrueのまま。。
ですので、WS_EX_TOPMOST属性が付いているか直接確認したいのですが、
MFCで言う、GetExStyle()にあたる関数を教えて下さい。
当方、最近.NETに移ったばかりなので、目当ての関数を見つけることが出来ませんでした。

よろしくお願いします。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

GetWindowLongをP/Invokeすればよいのでは?


返信引用
いろは
 いろは
(@いろは)
ゲスト
結合: 21年前
投稿: 43
Topic starter  

遅くなりました。

やはりP/Invokeするしかないのですかね。
.NET FrameworkになるとWin32APIを直接いじる事が少なくなると思っていたので、
『何か別の方法があるんでは?』っと思っていたのですが。。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました