WM_NCCALCSIZE メッセージ

ウィンドウのクライアント領域のサイズと位置を計算する必要がある場合に送信されます。 このメッセージを処理することで、アプリケーションは、ウィンドウのサイズまたは位置が変更されたときに、ウィンドウのクライアント領域の内容を制御できます。

ウィンドウは、WindowProc 関数を介してこのメッセージを受け取ります。

#define WM_NCCALCSIZE                   0x0083

パラメーター

wParam

wParamTRUE の場合は、クライアント領域のどの部分に有効な情報が含まれているかをアプリケーションが示す必要があることを指定します。 システムは、有効な情報を新しいクライアント領域内の指定された領域にコピーします。

wParamFALSE の場合、アプリケーションはクライアント領域の有効な部分を示す必要はありません。

lParam

wParamTRUE の場合、lParam は、アプリケーションがクライアント四角形の新しいサイズと位置を計算するために使用できる情報を含むNCCALCSIZE_PARAMS構造体を指します。

wParamFALSE の場合、lParam はRECT 構造体を指します。 エントリでは、構造体には、ウィンドウの提案されたウィンドウの四角形が含まれています。 終了時に、構造体には、対応するウィンドウ クライアント領域の画面座標が含まれている必要があります。

戻り値

型: LRESULT

wParam パラメーターが FALSE の場合、アプリケーションは 0 を返す必要があります。

wParamTRUE の場合、アプリケーションは 0 または次の値の組み合わせを返す必要があります。

wParamTRUE で、アプリケーションから 0 が返された場合、古いクライアント領域は保持され、新しいクライアント領域の左上隅に配置されます。

リターン コード/値 説明
WVR_ALIGNTOP
0x0010
ウィンドウのクライアント領域を保持し、ウィンドウの新しい位置の上部に配置することを指定します。 たとえば、クライアント領域を左上隅に揃えるには、WVR_ALIGNTOPと WVR_ALIGNLEFT の値を返します。
WVR_ALIGNRIGHT
0x0080
ウィンドウのクライアント領域を保持し、ウィンドウの新しい位置の右側に配置することを指定します。 たとえば、クライアント領域を右下隅に揃えるには、 WVR_ALIGNRIGHTとWVR_ALIGNBOTTOM の値を返します。
WVR_ALIGNLEFT
0x0020
ウィンドウのクライアント領域を保持し、ウィンドウの新しい位置の左側に配置することを指定します。 たとえば、クライアント領域を左下隅に揃えるには、 WVR_ALIGNLEFTWVR_ALIGNBOTTOM の値を返します。
WVR_ALIGNBOTTOM
0x0040
ウィンドウのクライアント領域を保持し、ウィンドウの新しい位置の下部に配置することを指定します。 たとえば、クライアント領域を左上隅に揃えるには、WVR_ALIGNTOPと WVR_ALIGNLEFT の値を返します。
WVR_HREDRAW
0x0100
WVR_VALIDRECTSを除く他の値と組み合わせて使用すると、クライアントの四角形のサイズが水平方向に変更されると、ウィンドウが完全に再描画されます。 この値は、 クラス スタイルCS_HREDRAW 似ています
WVR_VREDRAW
0x0200
WVR_VALIDRECTSを除く他の値と組み合わせて使用すると、クライアントの四角形のサイズが垂直方向に変更されると、ウィンドウが完全に再描画されます。 この値は、 クラス スタイルCS_VREDRAW 似ています
WVR_REDRAW
0x0300
この値を指定すると、ウィンドウ全体が再描画されます。 これは、WVR_HREDRAW値とWVR_VREDRAW値の組み合わせです。
WVR_VALIDRECTS
0x0400
この値は、WM_NCCALCSIZEから戻ると、NCCALCSIZE_PARAMS構造体の rgrc[1] メンバーと rgrc[2] メンバーによって指定された四角形に、それぞれ有効な変換先とソース領域の四角形が含まれていることを示します。 システムは、これらの四角形を組み合わせて、保持するウィンドウの領域を計算します。 システムは、ソース四角形内にあるウィンドウ イメージの任意の部分をコピーし、イメージをコピー先の四角形にクリップします。 両方の四角形は、親相対座標または画面相対座標内にあります。 このフラグを他のフラグと組み合わせることはできません。
この戻り値を使用すると、アプリケーションは、クライアント領域のサブセットの中心化や保持など、より複雑なクライアント領域の保持戦略を実装できます。

 

注釈

CS_HREDRAW または CS_VREDRAW クラス スタイルが指定されているかどうかに応じて、ウィンドウを再描画できます。 これは、 DefWindowProc 関数によるこのメッセージの既定の下位互換性のある処理です (前の表で説明した通常のクライアント四角形の計算に加えて)。

wParamTRUE の場合、NCCALCSIZE_PARAMS四角形を処理せずに 0 を返すだけで、クライアント領域のサイズがウィンドウ フレームを含むウィンドウのサイズに変更されます。 これにより、ウィンドウ フレームとキャプション項目がウィンドウから削除され、クライアント領域のみが表示されます。

Windows Vista 以降では、 wParamTRUE の場合に 0 を返すだけで標準フレームを削除しても、 DwmExtendFrameIntoClientArea 関数を使用してクライアント領域に拡張されるフレームには影響しません。 標準フレームのみが削除されます。

必要条件

要件
サポートされている最小のクライアント
Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows 2000 Server [デスクトップ アプリのみ]
ヘッダー
Winuser.h (Windows.h を含む)

関連項目

参照

DefWindowProc

MoveWindow

Setwindowpos

NCCALCSIZE_PARAMS

概念

Windows

その他のリソース

Rect