SetParent导致我的WPF窗口变得不可见

我正在写一个WPF程序,这将使一个Window出现在另一个进程的特定Win32窗口的顶部。

到目前为止这一般起作用:

  1. 获取我想覆盖的窗口的hWnd (目标)。
  2. 实例化我的覆盖窗口( class Overlay : Window )并显示它( overlay.Show() )。
  3. 调用SetWinEventHook作为LocationChangeDestroy事件的目标。
  4. SetWinEventHook for LocationChange的callbackSetWinEventHook ,我重新定位我的Overlay实例以匹配目标窗口的矩形。

问题是我的Overlay实例出现在z轴的目标窗口后面。 我可以通过设置Topmost = true解决这个问题,但是我的窗口位于所有窗口之上,而不仅仅是目标。

我试图调用SetParent( new WindowInteropHelper( overlay ).Handle, targetWindowHandle )但是当这种情况发生我覆盖窗口消失。 调用overlay.Show()不起作用。 我也试过用SetWindowLongPtr (虽然MSDN说不要用GWL_HWNDPARENT调用这个)无济于事。

为什么SetParent使我的窗口不可见,以及为了确保我的窗口保持在另一个特定窗口之上,最好的方法是什么(如果不是这样的话)?