【问题标题】:C# WinForm Maximize but not full screen, side effect when moving windowC# WinForm最大化但不是全屏,移动窗口时的副作用
【发布时间】:2018-03-20 08:32:13
【问题描述】:

我将表单的MaximumSize 设置为一个值,这样当用户按下最大化按钮时,表单仍然显示为窗口,而不是全屏。这行得通,但有两个我不想有的副作用:

  1. 窗口自动移动到左上角 屏幕;
  2. 当我用鼠标移动窗口时,它会自动 在我按下最大化按钮之前调整大小。

如何避免这些副作用?

编辑:有没有办法在按下最大化按钮时使表单水平居中?

【问题讨论】:

  • 请详细描述你到目前为止做了什么。
  • 你可能很难对抗操作系统。我可能宁愿接受行为约束,因为它是“设计的”。
  • 这些都是默认的 Windows 操作系统行为。当一个窗口最大化时,它会自动占据整个屏幕,从左上角开始。如果它的最大尺寸小于整个屏幕,它仍然会从左上角开始。移动最大化的窗口时,它会自动将其状态更改为已恢复。
  • 感谢 cmets。我了解此行为是操作系统有意为之。我还是想绕过它。
  • 有没有办法在按下最大化按钮时使表单水平居中?

标签: c# forms winforms move maximize


【解决方案1】:

您可以覆盖WndProc 以捕获MaximumSize 事件 像这样

    private const int SC_MAXIMIZE = 0xF030;
    private const int WM_SYSCOMMAND = 0x0112;
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_SYSCOMMAND)
        {
            if (m.WParam == new IntPtr(SC_MAXIMIZE))
            {
                this.Size = this.MaximumSize;
                return;
            }
        }
        base.WndProc(ref m);
    }

这应该可以解决您的问题, 但是,不建议违背操作系统的设计。这将导致对接出现问题,并且违背了用户的期望

【讨论】:

  • 感谢您提出可能的解决方案。
猜你喜欢
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多