SetParent 関数 (winuser.h)
指定した子ウィンドウの親ウィンドウを変更します。
構文
HWND SetParent(
[in] HWND hWndChild,
[in, optional] HWND hWndNewParent
);
パラメーター
[in] hWndChild
型: HWND
子ウィンドウへのハンドル。
[in, optional] hWndNewParent
型: HWND
新しい親ウィンドウへのハンドル。 このパラメーターが NULL の場合、デスクトップ ウィンドウは新しい親ウィンドウになります。 このパラメーターが HWND_MESSAGE場合、子ウィンドウは メッセージのみのウィンドウになります。
戻り値
型: HWND
関数が成功した場合、戻り値は前の親ウィンドウへのハンドルです。
関数が失敗した場合は、返される値は NULL です。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
アプリケーションでは 、SetParent 関数を使用して、ポップアップ ウィンドウ、重複ウィンドウ、または子ウィンドウの親ウィンドウを設定できます。
hWndChild パラメーターで識別されたウィンドウが表示されている場合、システムは適切な再描画と再描画を実行します。
互換性上の理由から、 SetParent では、親が変更されているウィンドウの WS_CHILD または WS_POPUP ウィンドウ スタイルは変更されません。 したがって、hWndNewParent が NULL の場合は、SetParent を呼び出した後、WS_CHILD ビットをクリアし、WS_POPUP スタイルを設定する必要もあります。 逆に、hWndNewParent が NULL ではなく、ウィンドウが以前はデスクトップの子だった場合は、SetParent を呼び出す前に、WS_POPUP スタイルをクリアし、WS_CHILD スタイルを設定する必要があります。
ウィンドウの親を変更するときは、両方のウィンドウの UISTATE を同期する必要があります。 詳細については、「 WM_CHANGEUISTATE と WM_UPDATEUISTATE」を参照してください。
hWndNewParent と hWndChild が異なる DPI 認識モードで実行されている場合、予期しない動作やエラーが発生する可能性があります。 次の表に、この動作の概要を示します。
操作 | Windows 8.1 | Windows 10 (1607 以前) | Windows 10 (1703 以降) |
---|---|---|---|
SetParent (In-Proc) | 該当なし | 強制リセット (現在のプロセスの) | 失敗 (ERROR_INVALID_STATE) |
SetParent (クロスプロセス) | 強制リセット (子ウィンドウのプロセスの) | 強制リセット (子ウィンドウのプロセスの) | 強制リセット (子ウィンドウのプロセスの) |
DPI 対応の詳細については、 Windows High DPI のドキュメントを参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | 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 で導入) |
関連項目
概念
リファレンス