3

ウィンドウのサイズが変更されると、Windows はいくつかのメッセージを送信します。

  • WM_GETMINMAXINFO
  • WM_ENTERSIZEMOVE
  • WM_EXITSIZEMOVE
  • WM_NCCALCSIZE
  • WM_サイズ
  • WM_SIZE
  • WM_WINDOWPOSCHANGING
  • WM_WINDOWPOSCHANGED

そしておそらくもっと。

ウィンドウのサイズが変更されたときに子の位置を変更したい場合、どこどのようにすればよいですか?
私は「最良の」方法を探しています。つまり、落とし穴が最も少なく、ちらつきが最も少ない方法です。

の現在の方法はWM_NCCALCSIZE、 を使用して 内ですべての再配置を実行することDeferWindowPosです。
しかし、私もそれを内部で処理しようとしました...しかしWM_WINDOWPOSCHANGED、どこで処理しても、ウィンドウが中間の状態でペイントされるとき、ウィンドウのサイズが変更されましたが、その内容はまだサイズ変更されていません。

私が避けたいもう 1 つの効果:既に移動した後に子を移動することです。変更によって、ユーザーがコントロールを下にスライドしてから元に戻すのを見たくありません。一時的な影響はできるだけ少なくする必要があります。

私はこれを正しくやっていますか?ウィンドウの子をレイアウトできるより良い場所はありますか?

4

1 に答える 1

4

WM_SIZE メッセージでウィンドウの位置を変更する必要があります。これは、ウィンドウがタスクを完了する前に受信する最後のメッセージであるためです...ウィンドウの位置を変更するには、MoveWindow を使用できます。

于 2012-06-03T20:36:03.427 に答える