“表单所有者”窗口无法从任务栏获得焦点

时间:2014-02-21 11:54:26

标签: c# winforms focus

我正在尝试将我的表单“链接”到另一个窗口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);
    }
}

0 个答案:

没有答案