親ウィンドウのサイズ変更を子ウィンドウが知る方法について

[戻る]
gBet 2011/04/04(月) 22:48:32
非常に初歩的な質問になってしまいますが、
VC++プログラム初心者ですのでご了承ください。


VC++6.0 MFCのSDIプログラムを作成しています。
FormViewを作成し、このクライアント領域にCWndから派生させた子ウィンドウを作成し
ました。

スタイルは WS_VISIBLE|WS_CHILD|WS_HSCROLL を指定しています。

親ウィンドウのサイズが変更になった場合、
作成した子ウィンドウがそれを知る方法はあるのでしょうか。

親ウィンドウ側でOnSizeハンドラを実装して、
子ウィンドウに通知するという方法では可能でしたが、
親ウィンドウ側では何もせずに、
完全に子ウィンドウ側のみで親ウィンドウのサイズ変更を
知る方法がありましたら教えてください。

よろしくお願いいたします。

仲澤@失業者 2011/04/05(火) 09:45:54
>親ウィンドウ側では何もせずに、
>完全に子ウィンドウ側のみで親ウィンドウのサイズ変更を
>知る方法がありましたら教えてください。

ありません。
親のOnSize()で、子にSetWindowPos()するのが普通です。
この様にすると子は自分のOnSize()でサイズの変更を知ることができるため、
独自の関数を実装する必要がありません。

みい 2011/04/05(火) 10:08:24
親ウィンドウで何もしないようにしたいなら、
定周期で親ウィンドウのサイズをGetWindowRectで取得して
変化があるかチェックするとかかな?
ただ即時の追随はできませんが。

maru 2011/04/05(火) 11:31:07
> 親ウィンドウのサイズが変更になった場合、
> 作成した子ウィンドウがそれを知る方法はあるのでしょうか。
それを知る「方法」があるか?より、それを知る「必要」があるかを考えましょう。
親のサイズ変更があったからといって、自分が何かをやる必要が有るかを考える必要
は有りません。親のサイズ変更に対して、子供である自分が何かやる必要があるなら
親がそのことを子供に教えるのが自然です。
つまり、
> 親のOnSize()で、子にSetWindowPos()するのが普通です。
ということです。

gBet 2011/04/05(火) 12:13:52
[[解決]]
回答ありがとうございました。

現在のプログラムでは、皆さんのおっしゃるように
親のOnSize関数内でSetWindowPosしています。

これが通常のやり方ということで安心しました。


やりたかったことは、
子ウィンドウをモジュール化して、
親ウィンドウはCreateするだけで済むような
プログラムを考えていました。


みいさんのおっしゃるように周期的に
確認することも考えましたが、
そこまでする必要もないことと、
あまりスマートでないので途中でやめました。


サイズ変更については、親側で面倒みないといけないですね。

dicson 2011/04/07(木) 10:32:35
SetWindowLong(hWnd,GWL_WNDPROC,WndProc)

について調べてみてください。

MFCの理念からずれますが可能です。

古いスレッドには追加発言できません。