【发布时间】:2021-12-15 21:31:49
【问题描述】:
我有一个我无法解决的问题。我正在尝试从我的应用程序中创建一个透明的窗口(使用标志WS_EX_TRANSPARENT | WS_EX_LAYERED)到另一个不透明的窗口的子窗口。
当我不使用带有 WS_EX_LAYERED 标志的 my_window 调用 SetParent( my_window, target_parent_window ) 时,新的子窗口将不可见。
我发现清单条目可以帮助我,因为从 Windows 8 开始支持带有标志 WS_EX_LAYERED 的子窗口。我尝试过但没有成功。
::SetWindowLongW( process_window, GWL_STYLE, WS_CLIPSIBLINGS | WS_POPUP | WS_VISIBLE );
::SetWindowLongW( process_window, GWL_EXSTYLE, WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW );
::SetWindowPos( process_window, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );
::ShowWindow( process_window, SW_SHOW );
::SetParent( process_window, new_parent_window); // if i skip this call the window will render perfectly
【问题讨论】:
-
参考documentation:“出于兼容性原因,SetParent 不会修改其父级正在更改的窗口的 WS_CHILD 或 WS_POPUP 窗口样式。”
-
父窗口是否与子窗口在同一个进程中