不允许用户调整最大化表单的大小



我正在用 C# 开发一个 Windows 窗体应用程序,其中我有一个窗体,它必须以最大化状态启动,并且不允许用户还原或调整它的大小。我已经将表单配置为以最大化模式启动,禁用还原和最大化按钮并锁定表单的边框,但是当双击标题栏时,表单会恢复到出乎意料的较小尺寸。以下是我为实现所需行为而设置的属性:

FormBorderStyle = FixedSingle
MaximizeBox = False
WindowState = Maximized

有人可以帮我解决这个问题并解释解决方案吗?

提前谢谢。

您必须记住,您的表单以一些默认大小值开头,双击只是在 2 种状态之间切换。
在您的正常状态下,表单将检索它的最后一个(在您的情况下默认(大小,您可以覆盖它:

Width = Screen.PrimaryScreen.Bounds.Width;
Height = Screen.PrimaryScreen.Bounds.Height;

另一件事是,您的应用程序具有称为开始位置的东西,该位置(据我所知(默认位于屏幕中央,您可以使用以下方法进行更改:

Form.StartPosition = new Point(0, 0); // top-left corner

现在,您在应用程序中所要做的就是检查窗口状态之间的切换。最简单的方法是使用 WndProc 并等待此 msdn 页面中列出的消息:

protected override void WndProc(ref Message m)
{
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MAXIMIZE   = 0xF030;
    const int SC_RESTORE    = 0xF120;
    if (m.Msg == WM_SYSCOMMAND)
    {
        switch((int)m.WParam)
        {
            case SC_RESTORE:
                // your window was restored ( double clicked on the command bar )
                // set it's window state back to maximize or do whatever
                break;
             case SC_MAXIMIZE:
                 // your window was maximized .. no actions needed, just for debugging purpose
                  break;
        }
    }
    base.WndProc(ref m);
}

这可以通过捕获事件并覆盖它来实现:

private void Form_Load(object sender, EventArgs e)
{
    this.FormBorderStyle = FormBorderStyle.FixedSingle;
    this.WindowState = FormWindowState.Maximized;
    this.MaximizeBox = false;
    this.MinimumSize = Screen.GetWorkingArea(this.Location).Size;
}
private const int WM_NCLBUTTONDBLCLK = 0x00A3; 
//double click on a title bar
protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_NCLBUTTONDBLCLK)
    {
        m.Result = IntPtr.Zero;
        return;
    }
    base.WndProc(ref m);
}

最新更新