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,并且窗口以前是桌面的子级,则应在调用 SetParent 之前清除WS_POPUP样式并设置WS_CHILD样式。

更改窗口的父级时,应同步两个窗口的 UISTATE。 有关详细信息,请参阅 WM_CHANGEUISTATEWM_UPDATEUISTATE

如果 hWndNewParenthWndChild 以不同的 DPI 感知模式运行,则可能会出现意外行为或错误。 下表概述了此行为:

操作 Windows 8.1 Windows 10 (1607 及更早版本的) Windows 10 (1703 及更高版本)
SetParent (Proc) 不可用 当前进程) 的强制重置 ( 失败 (ERROR_INVALID_STATE)
SetParent (Cross-Proc) 子窗口进程) 的强制重置 ( 子窗口进程) 的强制重置 ( 子窗口进程) 的强制重置 (
 

有关 DPI 感知的详细信息,请参阅 Windows 高 DPI 文档。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll
API 集 在 Windows 8) 中引入的 ext-ms-win-ntuser-window-l1-1-0 (

请参阅

概念性

GetParent

引用

Windows