ウィンドウのサイズが変更されると、Windows はいくつかのメッセージを送信します。
- WM_GETMINMAXINFO
- WM_ENTERSIZEMOVE
- WM_EXITSIZEMOVE
- WM_NCCALCSIZE
- WM_サイズ
- WM_SIZE
- WM_WINDOWPOSCHANGING
- WM_WINDOWPOSCHANGED
そしておそらくもっと。
ウィンドウのサイズが変更されたときに子の位置を変更したい場合、どこでどのようにすればよいですか?
私は「最良の」方法を探しています。つまり、落とし穴が最も少なく、ちらつきが最も少ない方法です。
私の現在の方法はWM_NCCALCSIZE
、 を使用して 内ですべての再配置を実行することDeferWindowPos
です。
しかし、私もそれを内部で処理しようとしました...しかしWM_WINDOWPOSCHANGED
、どこで処理しても、ウィンドウが中間の状態でペイントされるとき、ウィンドウのサイズが変更されましたが、その内容はまだサイズ変更されていません。
私が避けたいもう 1 つの効果:既に移動した後に子を移動することです。変更によって、ユーザーがコントロールを下にスライドしてから元に戻すのを見たくありません。一時的な影響はできるだけ少なくする必要があります。
私はこれを正しくやっていますか?ウィンドウの子をレイアウトできるより良い場所はありますか?