防止WindowState.Normal

时间:2013-06-17 10:56:39

标签: c# .net winforms

我有一个应用程序,我正在(对我自己),我想阻止Window显示。


到目前为止,我得到的是WindowState.Minimized,以便Form的初始状态最小化。当我点击任务栏中的应用程序图标时,我希望它保持最小化 - 而不仅仅是Hide()它显示的时候。所以我认为这样的事情可能有用:

protected override void OnGotFocus(EventArgs e)
{
    this.WindowState = WindowState.Minimized;
}

但我错了。所以我想的是我需要在 OnGotFocus之前发生的事情。仅仅在聚焦时隐藏它的原因是不够的,因为你可以非常微弱地看到它在this.WindowState = WindowState.Minimize被调用之前单击任务栏中的图标时实际显示出来。

我唯一的要求是,当在任务栏上单击图标时,不得显示该应用程序。不过,我需要以某种方式以编程方式显示窗口。

如何确保点击其图标永远不显示窗口?

2 个答案:

答案 0 :(得分:3)

这似乎对我有用,没有"提示"来来去去:

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x0112)  //WM_SYSCOMMAND
        {
            if ((m.WParam.ToInt32() & 0xFFF0) == 0xF030 ||
                (m.WParam.ToInt32() & 0xFFF0) == 0xF120)
                m.WParam = new IntPtr(0xF020);
        }
        base.WndProc(ref m);
    }

只需覆盖WndProc,即可同时捕捉SC_MAXIMIZE (0xF030)SC_RESTORE (0x0F120)SC_MINIMIZE is 0xF020

正如Hans建议的那样,我已经编辑了我的帖子,以掩盖系统根据此MSDN部分使用的低位:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646360(v=vs.85).aspx

答案 1 :(得分:0)

您好,您可以使用form_resize事件触发windowstate以最小化

    private void Form1_Resize ( object sender , EventArgs e )
    {
        if ( WindowState == FormWindowState.Maximized )
        {
            // minimize it here
        }
    }