我正在尝试将我的表单“链接”到另一个窗口like this。我使用Form.Show(IWin32Window owner)方法完成了这项工作。这工作得很好,有一个例外......当所有者窗口有焦点并且我在任务栏中单击它的图标时,所有者窗口(和我的窗口)可以很好地最小化。
然而,当我的表格有焦点,并且我点击任务栏中所有者窗口的图标时,我希望所有者窗口重新获得焦点,但事实并非如此。我的表格的边框闪烁表明它有焦点。我可以通过点击所有者窗口界限中的某个位置,将焦点从我的表单上移开,但我认为点击任务栏中的图标会做同样的事情吗?
在没有此焦点问题的情况下,是否可能有不同的方法将我的表单“链接”到另一个窗口? .ShowDialog(IWin32Window)不是我想要的,我想因为它一直想要专注,我希望我的表格始终保持最佳但不总是有焦点。
我正在使用无边框形式,所以我没有看到“闪烁”表示我的形状有焦点,除非我关闭无边框。如果无法以不同方式“链接”我的表单,是否有办法捕获此窗口消息,以便我可以实现自己的“闪烁”?
public class ParentWndWrapper : IWin32Window
{
IntPtr m_Handle;
public ParentWndWrapper(IntPtr pParent){m_Handle = pParent;}
public IntPtr Handle{get { return m_Handle; }}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Process[] processArray = Process.GetProcessesByName("Photoshop");
Process photoshopProcess = processArray[0];
IntPtr photoshopHWND = photoshopProcess.MainWindowHandle;
var win32Wrapper = new ParentWndWrapper(photoshopHWND);
Show(win32Wrapper);
}
}