非常に初歩的な質問になってしまいますが、
VC++プログラム初心者ですのでご了承ください。
VC++6.0 MFCのSDIプログラムを作成しています。
FormViewを作成し、このクライアント領域にCWndから派生させた子ウィンドウを作成し
ました。
スタイルは WS_VISIBLE|WS_CHILD|WS_HSCROLL を指定しています。
親ウィンドウのサイズが変更になった場合、
作成した子ウィンドウがそれを知る方法はあるのでしょうか。
親ウィンドウ側でOnSizeハンドラを実装して、
子ウィンドウに通知するという方法では可能でしたが、
親ウィンドウ側では何もせずに、
完全に子ウィンドウ側のみで親ウィンドウのサイズ変更を
知る方法がありましたら教えてください。
よろしくお願いいたします。
>親ウィンドウ側では何もせずに、
>完全に子ウィンドウ側のみで親ウィンドウのサイズ変更を
>知る方法がありましたら教えてください。
ありません。
親のOnSize()で、子にSetWindowPos()するのが普通です。
この様にすると子は自分のOnSize()でサイズの変更を知ることができるため、
独自の関数を実装する必要がありません。
親ウィンドウで何もしないようにしたいなら、
定周期で親ウィンドウのサイズをGetWindowRectで取得して
変化があるかチェックするとかかな?
ただ即時の追随はできませんが。
> 親ウィンドウのサイズが変更になった場合、
> 作成した子ウィンドウがそれを知る方法はあるのでしょうか。
それを知る「方法」があるか?より、それを知る「必要」があるかを考えましょう。
親のサイズ変更があったからといって、自分が何かをやる必要が有るかを考える必要
は有りません。親のサイズ変更に対して、子供である自分が何かやる必要があるなら
親がそのことを子供に教えるのが自然です。
つまり、
> 親のOnSize()で、子にSetWindowPos()するのが普通です。
ということです。
回答ありがとうございました。
現在のプログラムでは、皆さんのおっしゃるように
親のOnSize関数内でSetWindowPosしています。
これが通常のやり方ということで安心しました。
やりたかったことは、
子ウィンドウをモジュール化して、
親ウィンドウはCreateするだけで済むような
プログラムを考えていました。
みいさんのおっしゃるように周期的に
確認することも考えましたが、
そこまでする必要もないことと、
あまりスマートでないので途中でやめました。
サイズ変更については、親側で面倒みないといけないですね。
SetWindowLong(hWnd,GWL_WNDPROC,WndProc)
について調べてみてください。
MFCの理念からずれますが可能です。