場合によってはこの方法が好ましくないこともあります。ボタンのサイズは親ウインドウのサイズを取得しない限り求めることはできません。このように、動的にウインドウサイズを変更する場合はMoveWindowを呼び出します。bRepaint);hWndは、ウインドウハンドルを指定します。Xは、ウインドウの新しいX位置を指定します。Yは、ウインドウの新しいY位置を指定します。nWidthは、ウインドウの新しい幅を指定します。nHeightは、ウインドウの新しい高さを指定します。bRepaintは、位置やサイズの変更に伴い、ウインドウを再描画するかどうかを指定します。TRUEを指定した場合は、再描画が行われます。今回のプログラムは、MoveWindowを呼び出してコントロールのサイズを決定します。具体的にはこれはどこで呼び出せばよいでしょうか。親ウインドウのWM_SIZEで呼び出すのが最も適切であると思われます。WM_SIZEは、ウインドウのサイズが変更されて新しいサイズに決定した場合に送られます。これは特に必要ありません。上位ワードにウインドウのクライアント領域の高さが格納されます。これらは、それぞれLOWORDマクロとHIWORDマクロで取得することができます。MoveWindowの呼び出しによって、ボタンの幅と高さは、常にクライアント領域の2分の1を占めることになります。このような変更はBeginDeferWindowPosなどの呼び出しでも行うことができます。複数のウインドウを一斉に変更したい場合は役立ちます。lParam);}まず、BeginDeferWindowPosを呼び出して、複数ウインドウ位置構造体のハンドルを取得します。このとき、第1引数には一斉に変更したいウインドウの数を指定します。新しく更新された複数ウインドウ位置構造体を取得します。この関数の第2引数以降は、SetWindowPosと同じ意味を持ちます。最後のEndDeferWindowPosによって、DeferWindowPosに指定したウインドウが一斉に変更されます。