更改最小化视觉效果

Change Minimizing Visual Effect

我创建了一个不可见形式的应用程序。 (不透明度 = 0 或可见性 = false ShowInTaskbar = false) 我尝试了很多不同的方式来激活我的表单,同时激活其他应用程序。 "activating" 我的意思是在不让它可见的情况下给予它焦点。由于某种原因,Activate() 和 Focus() 方法没有按预期工作。根据 MSDN (https://msdn.microsoft.com/en-us/library/system.windows.forms.form.activate%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396),如果表单未最小化,Activate() 方法应该引起 window 的焦点,但它不起作用。

我发现激活(聚焦)我的 window 的唯一方法是将其最小化,然后 return 将其状态设为正常。它工作得非常完美,但还有另一个问题:对于 Windows XP,它会导致 window 的最小化和最大化的持续效果,即使它是不可见的。有没有办法让这个效果只对我的表单不可见?

现在这个效果是这样的:

根据我遇到的确切补充问题(我想有那些效果,但它们没有用),我认为这可以解决你的问题:

将表格 BorderStyle 更改为 none 怎么样? 在最小化调用之前:

this.FormBorderStyle = FormBorderStyle.None;

最大化后:

this.FormBorderStyle = FormBorderStyle.FixedSingle;

这将 winform 解析为既没有 minimize 也没有 maximize 也没有 restore 也没有 aerial 效果。

因此它可能解决错误的minimize/maximize效果。

好的,我设法找到了问题的答案,非常相似的问题已经出现在 Stack Overflow 上,我的错:Is it possible to disable animation when minimizing / restoring window?

简而言之,您只需要通过以下方式捕获最小化系统消息:

protected override void WndProc(ref Message m) {
        // Catch WM_SYSCOMMAND, SC_MINIMIZE
        if (m.Msg == 0x112 && m.WParam.ToInt32() == 0xf020) {
            this.Hide();
            this.WindowState = FormWindowState.Minimized;
            this.BeginInvoke(new Action(() => this.Show()));
            return;
        }
        base.WndProc(ref m);
    }