DeferWindowPos 関数 (winuser.h)

指定したウィンドウの指定した複数ウィンドウの位置構造を更新します。 その後、関数は更新された構造体へのハンドルを返します。 EndDeferWindowPos 関数は、この構造体の情報を使用して、複数のウィンドウの位置とサイズを同時に変更します。 BeginDeferWindowPos 関数は 構造体を作成します。

構文

HDWP DeferWindowPos(
  [in]           HDWP hWinPosInfo,
  [in]           HWND hWnd,
  [in, optional] HWND hWndInsertAfter,
  [in]           int  x,
  [in]           int  y,
  [in]           int  cx,
  [in]           int  cy,
  [in]           UINT uFlags
);

パラメーター

[in] hWinPosInfo

種類: HDWP

複数ウィンドウへのハンドル – 1 つ以上のウィンドウのサイズと位置情報を含む位置構造。 この構造体は、 BeginDeferWindowPos または DeferWindowPos の最新の呼び出しによって返されます。

[in] hWnd

型: HWND

更新情報が構造体に格納されるウィンドウへのハンドル。 複数ウィンドウの位置構造内のすべてのウィンドウは、同じ親を持つ必要があります。

[in, optional] hWndInsertAfter

型: HWND

Z 順に配置されたウィンドウの前にあるウィンドウへのハンドル。 このパラメーターは、ウィンドウ ハンドルまたは次のいずれかの値である必要があります。 uFlags パラメーターで SWP_NOZORDER フラグが設定されている場合、このパラメーターは無視されます。

意味
HWND_BOTTOM
((HWND)1)
Z オーダーの下部にあるウィンドウをPlacesします。 hWnd パラメーターが一番上のウィンドウを識別する場合、ウィンドウは最上位の状態を失い、他のすべてのウィンドウの下部に配置されます。
HWND_NOTOPMOST
((HWND)-2)
最上位以外のすべてのウィンドウ (つまり、すべての最上位ウィンドウの背後) の上にウィンドウをPlacesします。 ウィンドウが既に最上位以外のウィンドウである場合、このフラグは無効です。
HWND_TOP
((HWND)0)
Z オーダーの上部にあるウィンドウをPlacesします。
HWND_TOPMOST
((HWND)-1)
最上位以外のすべてのウィンドウの上にウィンドウをPlacesします。 非アクティブ化された場合でも、ウィンドウは最上位の位置を維持します。

[in] x

型: int

ウィンドウの左上隅の x 座標。

[in] y

型: int

ウィンドウの左上隅の y 座標。

[in] cx

型: int

ウィンドウの新しい幅 (ピクセル単位)。

[in] cy

型: int

ウィンドウの新しい高さ (ピクセル単位)。

[in] uFlags

型: UINT

ウィンドウのサイズと位置に影響する次の値の組み合わせ。

意味
SWP_DRAWFRAME
0x0020
ウィンドウの周囲にフレーム (ウィンドウのクラスの説明で定義) を描画します。
SWP_FRAMECHANGED
0x0020
ウィンドウ のサイズ が変更されていない場合でも、WM_NCCALCSIZEメッセージをウィンドウに送信します。 このフラグを指定しない場合、 WM_NCCALCSIZE はウィンドウのサイズが変更されている場合にのみ送信されます。
SWP_HIDEWINDOW
0x0080
ウィンドウを非表示にします。
SWP_NOACTIVATE
0x0010
ウィンドウをアクティブにしません。 このフラグが設定されていない場合、ウィンドウがアクティブになり、最上位または最上位以外のグループの先頭に移動されます ( hWndInsertAfter パラメーターの設定に応じて)。
SWP_NOCOPYBITS
0x0100
クライアント領域の内容全体を破棄します。 このフラグを指定しないと、クライアント領域の有効な内容が保存され、ウィンドウのサイズまたは位置が変更された後にクライアント領域にコピーされます。
SWP_NOMOVE
0x0002
現在の位置を保持します ( x パラメーターと y パラメーターは無視されます)。
SWP_NOOWNERZORDER
0x0200
Z オーダーでの所有者ウィンドウの位置は変更されません。
SWP_NOREDRAW
0x0008
変更は再描画されません。 このフラグが設定されている場合、任意の種類の再描画は行われません。 これは、クライアント領域、クライアント以外の領域 (タイトル バーとスクロール バーを含む)、およびウィンドウが移動された結果として明らかにされた親ウィンドウの任意の部分に適用されます。 このフラグが設定されている場合、アプリケーションは、ウィンドウと親ウィンドウの再描画が必要な部分を明示的に無効化または再描画する必要があります。
SWP_NOREPOSITION
0x0200
SWP_NOOWNERZORDER フラグと同じです。
SWP_NOSENDCHANGING
0x0400
ウィンドウが WM_WINDOWPOSCHANGING メッセージを受信できないようにします。
SWP_NOSIZE
0x0001
現在のサイズを保持します ( cx パラメーターと cy パラメーターは無視されます)。
SWP_NOZORDER
0x0004
現在の Z オーダーを保持します ( hWndInsertAfter パラメーターは 無視されます)。
SWP_SHOWWINDOW
0x0040
ウィンドウが表示されます。

戻り値

種類: HDWP

戻り値は、更新された複数ウィンドウの位置構造を識別します。 この関数によって返されるハンドルは、関数に渡されるハンドルとは異なる場合があります。 この関数が返す新しいハンドルは、 DeferWindowPos 関数または EndDeferWindowPos 関数の次の呼び出し中に渡す必要があります。

関数を成功させるために使用できるシステム リソースが不足している場合、戻り値は NULL です。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

DeferWindowPos の呼び出しが失敗した場合、アプリケーションはウィンドウ配置操作を破棄し、EndDeferWindowPos を呼び出す必要はありません。

SWP_NOZORDERが指定されていない場合、hWnd パラメーターで識別されるウィンドウは、hWndInsertAfter パラメーターで識別されるウィンドウの後の位置に配置されます。 hWndInsertAfterNULL またはHWND_TOPの場合、システムは hWnd ウィンドウを Z オーダーの先頭に配置します。 hWndInsertAfterHWND_BOTTOM に設定されている場合、システムは hWnd ウィンドウを Z オーダーの下部に配置します。

子ウィンドウのすべての座標は、親ウィンドウのクライアント領域の左上隅を基準にしています。

ウィンドウは、 hWndInsertAfterHWND_TOPMOST フラグに設定し、 SWP_NOZORDER フラグが設定されていないことを確認するか、既存の最上位ウィンドウの上になるようにウィンドウの位置を Z 順に設定することで、最上位のウィンドウにすることができます。 最上位以外のウィンドウが一番上に作成されると、その所有ウィンドウも最上位になります。 ただし、所有者は変更されません。

SWP_NOACTIVATEフラグもSWP_NOZORDERフラグも指定されていない場合 (つまり、アプリケーションがウィンドウの同時アクティブ化を要求し、Z オーダー内の位置が変更された場合)、hWndInsertAfter で指定された値は、次の状況でのみ使用されます。

  • hWndInsertAfter では、HWND_TOPMOSTフラグもHWND_NOTOPMOSTフラグも指定しません。
  • hWnd によって識別されるウィンドウはアクティブウィンドウではありません。
アプリケーションは、非アクティブなウィンドウをアクティブにすることはできません。また、それを Z オーダーの先頭に移動する必要があります。 アプリケーションは、制限なしに Z オーダーでアクティブ化されたウィンドウの位置を変更したり、ウィンドウをアクティブ化して、最上位または最上位以外のウィンドウの上部に移動したりできます。

Z オーダーの一番下 (HWND_BOTTOM) または最上位以外のウィンドウの後に位置が変更された場合、最上位のウィンドウは一番上に表示されなくなります。 一番上のウィンドウが一番上以外のウィンドウになると、その所有者と所有するウィンドウも最上位以外のウィンドウになります。

最上位以外のウィンドウは最上位のウィンドウを所有できますが、その逆は所有できません。 一番上のウィンドウが所有するウィンドウ (ダイアログ ボックスなど) は、すべての所有ウィンドウが所有者の上に留まるように、一番上のウィンドウになります。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winuser.h (Windows.h を含む)
Library User32.lib
[DLL] User32.dll
API セット ext-ms-win-ntuser-window-l1-1-4 (Windows 10 バージョン 10.0.14393 で導入)

こちらもご覧ください

BeginDeferWindowPos

概念

EndDeferWindowPos

リファレンス

Showwindow

Windows