C# 设置窗体最大化,以及窗体最大化时的坐标

reference:

https://www.cnblogs.com/adandelion/archive/2008/04/03/1136198.html

        protected override void WndProc(ref Message m)
        {            
            if (m.Msg == (int)WM.WM_GETMINMAXINFO)
            {
                MINMAXINFO mmi = (MINMAXINFO)m.GetLParam(typeof(MINMAXINFO));
                //mmi.ptMinTrackSize.x = this.MinimumSize.Width;
                //mmi.ptMinTrackSize.y = this.MinimumSize.Height;
                //if (this.MaximumSize.Width != 0 || this.MaximumSize.Height != 0)
                //{
                //    mmi.ptMaxTrackSize.x = this.MaximumSize.Width;
                //    mmi.ptMaxTrackSize.y = this.MaximumSize.Height;
                //}
                mmi.ptMaxPosition.x = _location.X;
                mmi.ptMaxPosition.y = _location.Y;

                System.Runtime.InteropServices.Marshal.StructureToPtr(mmi, m.LParam, true);
            }

            base.WndProc(ref m);
        }
        
        private void _UpdateMaxSizeInfo()
        {
            try
            {               
                // 获取当前窗体所在的屏幕
                Screen screen = Screen.FromControl(this);
                // 获取屏幕的工作区大小(排除了任务栏和停靠窗口的空间)
                Rectangle workingArea = screen.WorkingArea;
                //MessageBox.Show($"工作区大小: 宽度={workingArea.Width}, 高度={workingArea.Height}");
                // 获取整个屏幕的大小
                //Rectangle bounds = screen.Bounds;
                //MessageBox.Show($"屏幕总大小: 宽度={bounds.Width}, 高度={bounds.Height}");

                var x = workingArea.Location.X + index * workingArea.Width / count;
                x = index * workingArea.Width / count;
                _location =  new Point(x, 0);
                this.MaximumSize = new Size(workingArea.Width/count, workingArea.Height);
            }
            catch (Exception ex)
            {
                ex.ToErrorObject().Show();                
            }                     
        }
        private void BarControl_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if(this.WindowState==FormWindowState.Maximized)
            {
                this.WindowState = FormWindowState.Normal;
            }
            else
            {
                _UpdateMaxSizeInfo();
                this.WindowState = FormWindowState.Maximized;
            }
        }              

注意WndProc中在处理WM_GETMINMAXINFO后,可以继续运行 base.WndProc(ref m)
不会影响,可能系统默认不修改其中的内容

相关推荐

  1. C# 设置最大化以及最大化坐标

    2024-04-24 07:22:02       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-24 07:22:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-24 07:22:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-24 07:22:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-24 07:22:02       20 阅读

热门阅读

  1. 练习题(2024/4/23)

    2024-04-24 07:22:02       13 阅读
  2. GIT 仓库迁移

    2024-04-24 07:22:02       12 阅读
  3. 数据结构 - 顺序表实现通讯录

    2024-04-24 07:22:02       14 阅读
  4. Cocos Creator 3D资源的导入与动画播放详解

    2024-04-24 07:22:02       12 阅读
  5. windows驱动开发-I/O请求(一)

    2024-04-24 07:22:02       15 阅读
  6. 模拟电子技术实验(实验十一)

    2024-04-24 07:22:02       14 阅读
  7. lucene

    2024-04-24 07:22:02       16 阅读