ウィンドウを更新するには、InvalidateRectでこれらのうちどれを使用すればよいですか?なぜ?
ウィンドウの四角形には、クライアント以外の領域、つまりウィンドウの境界線、キャプションバーなどが含まれます。クライアントの四角形には含まれません。
GetWindowRect
は画面座標で四角形を返し、GetClientRect
はクライアント座標で四角形を返します。
InvalidateRect
はクライアント座標で長方形を受け取ります。クライアント領域全体を無効にする場合は、NULL
をInvalidateRect
に渡します。 GetClientRect
から返される四角形を渡すこともできますが、NULL
を渡す方がはるかに簡単で明確です。
GetClientRect
は、ウィンドウのクライアント領域の座標を取得します。具体的には、これはinsidewindow chrome andexcludesヘッダーなど。 MSDNページ のコメントの1つは、非常によく要約しています。
この関数は、レンダリングできる領域のサイズを返します。
GetWindowsRect
はウィンドウ全体の座標を取得します。これは、includesヘッダー、ステータスバーなどです。ただし、 MSDNページのコメントによると
WINVER = 6にリンクされていないVistaでのアプリは、ここでは誤解を招くような値のセットを受け取りますが、Vista Aeroがウィンドウに適用する「ガラス」ピクセルの余分なパディングは考慮されていません。
したがって、これがWindows 7で修正されていない限り、得られた結果を再確認し、WINVER
の値が正しいことを確認してください。
非常に簡単な説明は、GetWindowRect()
がウィンドウの境界を含む長方形を提供するということです。 GetClientRect()
は、境界線を除外する長方形を提供します。これは、ウィンドウ固有の図面に割り当てられる領域です。
GetWindowRect()
は、画面座標(画面/モニターに相対的な座標)で長方形を返すことに注意してください。 GetClientRect()
は、それ自体に相対的な長方形を返します。
MSDNから:
GetWindowRect
指定されたウィンドウの外接する四角形の寸法を取得します。寸法は、画面の左上隅を基準にした画面座標で指定されます。
GetClientRect
ウィンドウのクライアント領域の座標を取得します。クライアント座標は、クライアント領域の左上隅と右下隅を指定します。クライアントの座標はウィンドウのクライアント領域の左上隅を基準にしているため、左上隅の座標は(0,0)です。
その他:クライアント四角形には、タイトルバー、境界線、スクロールバー、ステータスバーは含まれません...