親Windowが削除された際、子のウィンドウを残しておきたいのですが、やり方がわかりません。親子関係を切り替えれば、、と思い、CWnd::SetParentなどしてみましたが、うまくいきませんでした。
IEのようにあるイベントが発生すると自分と同じWindowをCreateするようなプログラムで、MFCを使用しています。
よろしくお願いします。
IEの場合はそもそも親子じゃない独立したウィンドウとしてCreateしているのでは?IEを引き合いに出すなら、そこら辺から真似した方が良い気がする。
(MACやlinuxでない)Windowsで、そういう作法はあまり聞いたことがないしね。
SetParentをどのように試したら
どのような結果になったのでしょうか。
実験したところ
別の親ウィンドウに変えることに成功しましたけど。
オーナー所有関係のウインドウはSetParentだけでいいと思いますが、親子関係のウインドウはスタイル(WS_CHILD)も変更する必要があると思います。
どの関係のウインドウでもプログラムが終了しないように注意しなければいけないと思います。
間違っていたらごめんなさい。
追記:
親子関係ウインドウのスタイル変更は、親を持たない(トップレベル)ウインドウにする場合だけでした。
ごめんなさい。
念のため;
親ウィンドウがメインウィンドウのことで
メインウィンドウを閉じてしまうってことはないよね。
俺が試したのは単なるコントロール。
もしかしたらドキュメント・ビューとかの移動なのか。
MFCが管理している情報に狂いが生じるのかも。
>メインウィンドウを閉じてしまうってことはないよね。
IEを引き合いに出しているので、もろにそういう話では?
>MFCが管理している情報に狂いが生じるのかも。
ということで、もしそうなら「そもそもそういう事はやめたほうが良い」というのが答えかと。独立した2つのプロセスにして、プロセス間通信のような形で連帯させた方が良いと思う。
まあ本人の返答待ちだけど。
返信遅れましてすみません。
ドキュメントビューではなく、CWinAppには作成したCWndの派生クラス(CMyWnd)をメインウィンドウに指定しています。
CMyWnd内のイベントで同じCMyWndを作成しており、作成元のCMyWndを削除しても、子のほうは残す処理を目指してます。
(IE6のイメージです。)
親子関係がまずそうなので、兄弟関係にしようと、別に非表示の親を作ってそこから子を作成するような形にしてみたのですが、最小化した際のアニメーション(XP)が普通と違い、左下に移動する動作がどうにも気にいらず、できればメインウィンドウを含めて親子関係を簡単に変更できれば、と足りない知識で模索しています。
>独立した2つのプロセスにして、プロセス間通信のような形で連帯させた方が良いと思う。
処理が煩雑になるため、できれば、ウィンドウが必要になるたびにプロセスをあげるのは避けたいのですが、プロセスやスレッドを作成したほうが良さそうでしょうか?
馬場さんに質問します。
「うまくいかない」は、実行時エラーが発生するのですか?もしエラーなら どのようなエラーか教えてください。
> 最小化した際のアニメーション(XP)が普通と違い、左下に移動する動作がどうにも気にいらず、
これは、WS_EX_APPWINDOW で解決できると思います。
>dairygoods様
教えていただきましたWS_EX_APPWINDOWでうまく期待通りに動作しました。
大変、感謝です。
>jackdaw様
解決につき、返信は省略させてください。
>皆々様
ご回答、ご返信、ありがとうございました。
解決マークのチェックを忘れました。。
解決です。
ツイート | ![]() |