我正在WPF中编写一个程序,它会使Window
显示在另一个进程中的特定Win32窗口之上。
到目前为止,这通常有效:
hWnd
(目标)。class Overlay : Window
)并显示它(overlay.Show()
)。SetWinEventHook
了解LocationChange
和Destroy
事件的目标。SetWinEventHook
LocationChange
的回调中,我重新定位了我的Overlay
实例以匹配目标窗口的矩形。问题是我的Overlay
实例出现在z轴的目标窗口后面。我可以通过设置Topmost = true
来解决这个问题,但是我的窗口位于所有窗口的顶部,而不仅仅是目标。
我尝试调用SetParent( new WindowInteropHelper( overlay ).Handle, targetWindowHandle )
但是当发生这种情况时,我的覆盖窗口会消失。调用overlay.Show()
无效。我也尝试使用SetWindowLongPtr
(虽然MSDN说不要用GWL_HWNDPARENT
来调用它)但无济于事。
为什么SetParent
使我的窗口不可见,以及确保我的窗口保持在另一个特定窗口之上的最佳方式(如果不是这样)是什么?