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 ウィンドウ スタイルは変更されません。 したがって、hWndNewParentNULL の場合は、SetParent を呼び出した後、WS_CHILD ビットをクリアし、WS_POPUP スタイルを設定する必要もあります。 逆に、hWndNewParentNULL ではなく、ウィンドウが以前はデスクトップの子だった場合は、SetParent を呼び出す前に、WS_POPUP スタイルをクリアし、WS_CHILD スタイルを設定する必要があります。

ウィンドウの親を変更するときは、両方のウィンドウの UISTATE を同期する必要があります。 詳細については、「 WM_CHANGEUISTATEWM_UPDATEUISTATE」を参照してください。

hWndNewParenthWndChild が異なる 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 で導入)

関連項目

概念

GetParent

リファレンス

Windows