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,您也應該清除WS_CHILD位,並在呼叫 SetParent 之後設定WS_POPUP樣式。 相反地,如果 hWndNewParent 不是 NULL,而且視窗先前是桌面的子系,您應該清除WS_POPUP樣式,並在呼叫 SetParent 之前設定WS_CHILD樣式。
當您變更視窗的父系時,應該同步處理這兩個視窗的 UISTATE。 如需詳細資訊,請參閱 WM_CHANGEUISTATE 和 WM_UPDATEUISTATE。
如果 hWndNewParent 和 hWndChild 在不同的 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) |
另請參閱
概念
參考