親Windowが削除されても子を残したい

解決


馬場  2006-12-24 00:02:39  No: 64052

親Windowが削除された際、子のウィンドウを残しておきたいのですが、やり方がわかりません。親子関係を切り替えれば、、と思い、CWnd::SetParentなどしてみましたが、うまくいきませんでした。

IEのようにあるイベントが発生すると自分と同じWindowをCreateするようなプログラムで、MFCを使用しています。

よろしくお願いします。


ギザ初心者  2006-12-24 14:54:53  No: 64053

IEの場合はそもそも親子じゃない独立したウィンドウとしてCreateしているのでは?IEを引き合いに出すなら、そこら辺から真似した方が良い気がする。

(MACやlinuxでない)Windowsで、そういう作法はあまり聞いたことがないしね。


超初心者  2006-12-24 18:35:10  No: 64054

SetParentをどのように試したら
どのような結果になったのでしょうか。

実験したところ
別の親ウィンドウに変えることに成功しましたけど。


jackdaw  2006-12-24 20:24:26  No: 64055

オーナー所有関係のウインドウはSetParentだけでいいと思いますが、親子関係のウインドウはスタイル(WS_CHILD)も変更する必要があると思います。
どの関係のウインドウでもプログラムが終了しないように注意しなければいけないと思います。
間違っていたらごめんなさい。


jackdaw  2006-12-24 20:45:48  No: 64056

追記:
親子関係ウインドウのスタイル変更は、親を持たない(トップレベル)ウインドウにする場合だけでした。
ごめんなさい。


超初心者  2006-12-24 21:01:52  No: 64057

念のため;
親ウィンドウがメインウィンドウのことで
メインウィンドウを閉じてしまうってことはないよね。


超初心者  2006-12-24 21:37:09  No: 64058

俺が試したのは単なるコントロール。
もしかしたらドキュメント・ビューとかの移動なのか。
MFCが管理している情報に狂いが生じるのかも。


ギザ初心者  2006-12-24 23:15:00  No: 64059

>メインウィンドウを閉じてしまうってことはないよね。
IEを引き合いに出しているので、もろにそういう話では?

>MFCが管理している情報に狂いが生じるのかも。
ということで、もしそうなら「そもそもそういう事はやめたほうが良い」というのが答えかと。独立した2つのプロセスにして、プロセス間通信のような形で連帯させた方が良いと思う。

まあ本人の返答待ちだけど。


馬場  2006-12-25 08:04:55  No: 64060

返信遅れましてすみません。

ドキュメントビューではなく、CWinAppには作成したCWndの派生クラス(CMyWnd)をメインウィンドウに指定しています。

CMyWnd内のイベントで同じCMyWndを作成しており、作成元のCMyWndを削除しても、子のほうは残す処理を目指してます。
(IE6のイメージです。)

親子関係がまずそうなので、兄弟関係にしようと、別に非表示の親を作ってそこから子を作成するような形にしてみたのですが、最小化した際のアニメーション(XP)が普通と違い、左下に移動する動作がどうにも気にいらず、できればメインウィンドウを含めて親子関係を簡単に変更できれば、と足りない知識で模索しています。

>独立した2つのプロセスにして、プロセス間通信のような形で連帯させた方が良いと思う。
処理が煩雑になるため、できれば、ウィンドウが必要になるたびにプロセスをあげるのは避けたいのですが、プロセスやスレッドを作成したほうが良さそうでしょうか?


jackdaw  2006-12-25 18:01:09  No: 64061

馬場さんに質問します。
「うまくいかない」は、実行時エラーが発生するのですか?もしエラーなら どのようなエラーか教えてください。


dairygoods  2006-12-25 18:45:03  No: 64062

> 最小化した際のアニメーション(XP)が普通と違い、左下に移動する動作がどうにも気にいらず、

これは、WS_EX_APPWINDOW で解決できると思います。


馬場  2006-12-25 22:07:24  No: 64063

>dairygoods様
教えていただきましたWS_EX_APPWINDOWでうまく期待通りに動作しました。
大変、感謝です。

>jackdaw様
解決につき、返信は省略させてください。

>皆々様
ご回答、ご返信、ありがとうございました。


馬場  2006-12-25 22:08:00  No: 64064

解決マークのチェックを忘れました。。
解決です。


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

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






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