使用0应用程序UI调用SetParent时无响应

时间:2016-06-15 13:54:56

标签: c# wpf winforms setparent

我有两个申请。一个是WinForms应用程序(又名Parent),另一个是WPF应用程序(Child)。

Child可以像Parent一样独立运行。我正在研究Child的功能,使其在Parent中表现得像UserControl,但仍然作为一个单独的进程运行。

我成功调用了SetParent并使用Forms.UserControl来处理Child的大小和位置。

//owningHandle is the handle of the winform control that Child resides in.
//owner is the user control
//addinHandle is the handle of the Child window

SetParent(addinHandle, owningHandle);
SetWindowLongPtr(addinHandle, GWL_STYLE, style);
SetWindowPos(addinHandle,
             IntPtr.Zero,
             owner.Left, owner.Top,
             (int) owner.Width, (int)owner.Height,
             SetWindowPosFlags.SWP_NOZORDER | SetWindowPosFlags.SWP_NOACTIVATE);

现在我们希望能够从Parent中取消子进程的UnSetParent。我已经读过,我需要做的就是调用SetParent,父参数为0(IntPtr.Zero)。

//I store the original Window style in _originalStyle before calling the SetParent logic above. This way we can get the proper Windows border around the application
uint newStyle = (uint)_originalStyle;
newStyle = (newStyle | (uint)WindowStyles.WS_POPUP) & (uint)(~WindowStyles.WS_CHILD);
SetWindowLongPtr(addinHandle, GWL_STYLE, newStyle);
SetParent(addinHandle, IntPtr.Zero);

但是,我注意到大多数时候我的Child应用程序无法以任何方式点击。 UI组件都不响应点击,包括窗口上的最小化,恢复,关闭按钮。如果我点击任何地方,我会发出Windows哔声。我可以附加一个调试器,看看在应用程序中运行的任何定时器仍然存在。

在分离WPF应用程序时是否需要采取一些步骤?

0 个答案:

没有答案