覆盖的CreateParams不生效

时间:2016-12-13 13:59:18

标签: c# .net winapi

我覆盖了一个表单(System.Windows.Forms.Form,我将其称之为Form0)的 CreateParams 属性,如下所述

protected override CreateParams CreateParams
{
    get
    {
        CreateParams _CreateParams = base.CreateParams;
        _CreateParams.ExStyle |= (WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW);
        _CreateParams.Parent = IntPtr.Zero;
        return _CreateParams;
    }
}

此窗口不应该被激活(WS_EX_NOACTIVATE)并且任务栏中没有显示图标(WS_EX_TOOLWINDOW)。

使用

时效果很好
Application.Run(new Form0());

但是当我使用

时,它不能像我预期的那样工作
Form0.Show()

我想知道为什么以及如何在使用Show()时使其生效。

1 个答案:

答案 0 :(得分:1)

您应该禁用窗口的WS_EX_APPWINDOW样式。您不需要添加WS_EX_TOOLWINDOWWS_EX_NOACTIVATE默认处理它:

protected override CreateParams CreateParams
{
    get
    {
        CreateParams _CreateParams = base.CreateParams;
        _CreateParams.ExStyle |= WS_EX_NOACTIVATE;
        _CreateParams.ExStyle &= (~WS_EX_APPWINDOW); //<----
        _CreateParams.Parent = IntPtr.Zero;
        return _CreateParams;
    }
}