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,并且窗口以前是桌面的子级,则应在调用 SetParent 之前清除WS_POPUP样式并设置WS_CHILD样式。
更改窗口的父级时,应同步两个窗口的 UISTATE。 有关详细信息,请参阅 WM_CHANGEUISTATE 和 WM_UPDATEUISTATE。
如果 hWndNewParent 和 hWndChild 以不同的 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 ( |
请参阅
概念性
引用