SetWindowPos 関数 (winuser.h)
子ウィンドウ、ポップアップ ウィンドウ、またはトップレベル ウィンドウのサイズ、位置、Z の順序を変更します。 これらのウィンドウは、画面上の外観に応じて並べ替えされます。 一番上のウィンドウは最高ランクを受け取り、Z オーダーの最初のウィンドウです。
構文
BOOL SetWindowPos(
[in] HWND hWnd,
[in, optional] HWND hWndInsertAfter,
[in] int X,
[in] int Y,
[in] int cx,
[in] int cy,
[in] UINT uFlags
);
パラメーター
[in] hWnd
型: HWND
ウィンドウへのハンドル。
[in, optional] hWndInsertAfter
型: HWND
Z 順に配置されたウィンドウの前にあるウィンドウへのハンドル。 このパラメーターは、ウィンドウ ハンドルまたは次のいずれかの値である必要があります。
このパラメーターの使用方法の詳細については、次の「解説」セクションを参照してください。
[in] X
型: int
クライアント座標でのウィンドウの左側の新しい位置。
[in] Y
型: int
クライアント座標でのウィンドウの上部の新しい位置。
[in] cx
型: int
ウィンドウの新しい幅 (ピクセル単位)。
[in] cy
型: int
ウィンドウの新しい高さ (ピクセル単位)。
[in] uFlags
型: UINT
ウィンドウのサイズ設定と配置フラグ。 このパラメーターは、次の値と組み合わせて使用できます。
値 | 意味 |
---|---|
|
呼び出し元のスレッドとウィンドウを所有するスレッドが異なる入力キューにアタッチされている場合、システムはそのウィンドウを所有するスレッドに要求をポストします。 これにより、他のスレッドが要求を処理している間、呼び出し元のスレッドがその実行をブロックできなくなります。 |
|
WM_SYNCPAINT メッセージの生成を禁止します。 |
|
ウィンドウの周囲にフレーム (ウィンドウのクラスの説明で定義) を描画します。 |
|
SetWindowLong 関数を使用して、新しいフレーム スタイル セットを適用します。 ウィンドウ のサイズ が変更されていない場合でも、WM_NCCALCSIZEメッセージをウィンドウに送信します。 このフラグを指定しない場合、 WM_NCCALCSIZE はウィンドウのサイズが変更されている場合にのみ送信されます。 |
|
ウィンドウを非表示にします。 |
|
ウィンドウをアクティブにしません。 このフラグが設定されていない場合、ウィンドウがアクティブになり、最上位または最上位以外のグループの先頭に移動されます ( hWndInsertAfter パラメーターの設定に応じて)。 |
|
クライアント領域の内容全体を破棄します。 このフラグを指定しないと、クライアント領域の有効な内容が保存され、ウィンドウのサイズまたは位置が変更された後にクライアント領域にコピーされます。 |
|
現在位置を保持します ( X パラメーターと Y パラメーターは無視されます)。 |
|
Z オーダーでの所有者ウィンドウの位置は変更されません。 |
|
変更は再描画されません。 このフラグが設定されている場合、任意の種類の再描画は行われません。 これは、クライアント領域、クライアント以外の領域 (タイトル バーとスクロール バーを含む)、およびウィンドウが移動された結果として明らかにされた親ウィンドウの任意の部分に適用されます。 このフラグが設定されている場合、アプリケーションは、ウィンドウと親ウィンドウの再描画が必要な部分を明示的に無効化または再描画する必要があります。 |
|
SWP_NOOWNERZORDER フラグと同じです。 |
|
ウィンドウが WM_WINDOWPOSCHANGING メッセージを受信できないようにします。 |
|
現在のサイズを保持します ( cx パラメーターと cy パラメーターは無視されます)。 |
|
現在の Z オーダーを保持します ( hWndInsertAfter パラメーターは 無視されます)。 |
|
ウィンドウが表示されます。 |
戻り値
種類: BOOL
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
Vista の再アーキテクチャの一環として、すべてのサービスが対話型デスクトップからセッション 0 に移動されました。 hwnd 操作とウィンドウ マネージャー操作はセッション内でのみ有効であり、hwnd を操作するセッション間の試行は失敗します。 詳細については、「 Windows Vista Developer Story: Application Compatibility Cookbook」を参照してください。
SetWindowLong を使用して特定のウィンドウ データを変更した場合、変更を有効にするには SetWindowPos を呼び出す必要があります。
uFlags には、次の組み合わせを使用します。 SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED
ウィンドウは、 hWndInsertAfter パラメーターを HWND_TOPMOST に設定し、 SWP_NOZORDER フラグが設定されていないことを確認するか、既存の最上位ウィンドウの上にウィンドウの位置を Z 順に設定することで、最上位ウィンドウにすることができます。 最上位以外のウィンドウが一番上に作成されると、その所有ウィンドウも最上位になります。 ただし、所有者は変更されません。
SWP_NOACTIVATEフラグもSWP_NOZORDERフラグも指定されていない場合 (つまり、アプリケーションがウィンドウを同時にアクティブ化することを要求し、Z オーダー内の位置が変更された場合)、hWndInsertAfter で指定された値は、次の状況でのみ使用されます。
- hWndInsertAfter では、HWND_TOPMOSTフラグもHWND_NOTOPMOSTフラグも指定しません。
- hWnd によって識別されるウィンドウはアクティブウィンドウではありません。
一番上のウィンドウが Z オーダーの下部 (HWND_BOTTOM) に位置変更された場合、または最上位以外のウィンドウの後に位置が変更された場合、最上位ウィンドウは表示されなくなります。 一番上のウィンドウが一番上以外のウィンドウになると、その所有者と所有するウィンドウも最上位以外のウィンドウになります。
最上位以外のウィンドウは最上位のウィンドウを所有できますが、逆のウィンドウは発生できません。 一番上のウィンドウが所有するウィンドウ (ダイアログ ボックスなど) は、すべての所有ウィンドウが所有者の上に留まるように、それ自体が最上位のウィンドウになります。
アプリケーションがフォアグラウンドになく、フォアグラウンドに存在する必要がある場合は、 SetForegroundWindow 関数を呼び出す必要があります。
SetWindowPos を使用してウィンドウを一番上に移動するには、ウィンドウを所有するプロセスに SetForegroundWindow 権限が必要です。
例
例については、「 ダイアログ ボックスの初期化」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | 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-0 (Windows 8で導入) |
関連項目
概念
リファレンス