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_CHILDWS_POPUP 視窗樣式。 因此,如果 hWndNewParentNULL,您也應該清除WS_CHILD位,並在呼叫 SetParent 之後設定WS_POPUP樣式。 相反地,如果 hWndNewParent 不是 NULL,而且視窗先前是桌面的子系,您應該清除WS_POPUP樣式,並在呼叫 SetParent 之前設定WS_CHILD樣式。

當您變更視窗的父系時,應該同步處理這兩個視窗的 UISTATE。 如需詳細資訊,請參閱 WM_CHANGEUISTATEWM_UPDATEUISTATE

如果 hWndNewParenthWndChild 在不同的 DPI 感知模式中執行,可能會發生非預期的行為或錯誤。 下表概述此行為:

作業 Windows 8.1 Windows 10 (1607 和更早版本) Windows 10 (1703 和更新版本)
SetParent (In-Proc) N/A 目前進程) 的強制重設 ( 失敗 (ERROR_INVALID_STATE)
SetParent (Cross-Proc) 子窗口進程) 的強制重設 ( 子窗口進程) 的強制重設 ( 子窗口進程) 的強制重設 (
 

如需 DPI 感知的詳細資訊,請參閱 Windows High DPI 檔。

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 winuser.h (包括 Windows.h)
程式庫 User32.lib
Dll User32.dll
API 集合 ext-ms-win-ntuser-window-l1-1-0 (於 Windows 8)

另請參閱

概念

GetParent

參考

Windows