一、重写窗体的SizeChanged事件不能改变窗体最大化的位置和大小。

  1. public partial class Form2 : Form
  2. {
  3. public Form2()
  4. {
  5. InitializeComponent();
  6. }
  7.  
  8. private void Form2_SizeChanged(object sender, EventArgs e)
  9. {
  10. int height, width, newformx, newformy;
  11. height = System.Windows.Forms.SystemInformation.WorkingArea.Height;
  12. width = System.Windows.Forms.SystemInformation.WorkingArea.Width;
  13. switch (this.WindowState)
  14. {
  15. case FormWindowState.Maximized://最大化操作
  16. this.Width = width;
  17. this.Height = height - 50;
  18. newformx = 0;
  19. newformy = 50;
  20. this.SetDesktopLocation(newformx, newformy);
  21. break;
  22. case FormWindowState.Normal://默认窗口大小
  23. this.Width = 808;
  24. this.Height = 618;
  25. newformx = 0;
  26. newformy = 50;
  27. this.SetDesktopLocation(newformx, newformy);
  28. break;
  29. }
  30. }
  31. }

二、重写WndProc方法得以实现。

  1. public partial class Form2 : Form
  2. {
  3. private const long WM_GETMINMAXINFO = 0x24;
  4.  
  5. public struct PointAPI
  6. {
  7. public int x;
  8. public int y;
  9. }
  10.  
  11. public struct MinMaxInfo
  12. {
  13. public PointAPI ptReserved;
  14. public PointAPI ptMaxSize;
  15. public PointAPI ptMaxPosition;
  16. public PointAPI ptMinTrackSize;
  17. public PointAPI ptMaxTrackSize;
  18. }
  19.  
  20. public Form2()
  21. {
  22. InitializeComponent();
  23. this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
  24. }
  25.  
  26. protected override void WndProc(ref System.Windows.Forms.Message m)
  27. {
  28. base.WndProc(ref m);
  29. if (m.Msg == WM_GETMINMAXINFO)
  30. {
  31. MinMaxInfo mmi = (MinMaxInfo)m.GetLParam(typeof(MinMaxInfo));
  32. mmi.ptMinTrackSize.x = this.MinimumSize.Width;
  33. mmi.ptMinTrackSize.y = this.MinimumSize.Height;
  34. if (this.MaximumSize.Width != 0 || this.MaximumSize.Height != 0)
  35. {
  36. mmi.ptMaxTrackSize.x = this.MaximumSize.Width;
  37. mmi.ptMaxTrackSize.y = this.MaximumSize.Height;
  38. }
  39. mmi.ptMaxPosition.x = 1;
  40. mmi.ptMaxPosition.y = 1;
  41. System.Runtime.InteropServices.Marshal.StructureToPtr(mmi, m.LParam, true);
  42. }
  43. }
  44. }

Winform窗体最大化的时候,如何指定窗体的位置、大小的更多相关文章

  1. winform 窗体最大化 分类: WinForm 2014-07-17 15:57 215人阅读 评论(0) 收藏

    1:窗体首次加载时最大化 (1):主窗体 this.WindowState = FormWindowState.Maximized; //窗体显示中间部分,不显示窗体名称和最小化.最大化.关闭按钮   ...

  2. 解决WinForm(C#)中MDI子窗体最大化的问题

    “用MDI方式打开一个子窗口体后,总是不能最大化显示,明明子窗口体的WindowState设置为Maximized?”,相信有很多人会遇到这的样问题,请按下面的方法设置即可使MDI子窗体最大化: 1. ...

  3. C# WinForm 关于窗体最大化时的是否全屏效果与是否遮盖任务栏

    0.新建窗体 及添加按钮 1.  执行如下按钮事件  private void btnFormMax_Click(object sender, EventArgs e)  {     if (this ...

  4. 解决WinForm(C#)中MDI子窗体最大化跑偏的问题

    “用MDI方式打开一个子窗口体后,总是不能最大化显示,明明子窗口体的WindowState设置为Maximized?”,相信有很多人会遇到这的样问题,请按下面的方法设置即可使MDI子窗体最大化: 1. ...

  5. 【Winform-最大化窗体】Winform设置窗体最大化,填满整个屏幕

    设置窗体最大化,填满整个屏幕//this.MaximizedBounds = Screen.PrimaryScreen.WorkingArea;//this.MaximumSize = Screen. ...

  6. Delphi 中的全局快捷键+给指定窗体发送按键

    [背景] 公司做视频影像采集,平时采集图像的时候都需要打开采集窗口,然后需要开着采集窗口来进行图像采集.同事问我能不能做一个全局快捷键,哪怕我没有操作也可以采集图像.说干就干,一直想做全局快捷键了,网 ...

  7. Delphi窗体最大化按钮不可用情况下的最大化

    最大化按钮不可用,而且窗体最大化,我以前一直这样设置:在Object Inspector下把BorderIcons属性下的biMaximize属性设置为False,然后把WindowState属性设置 ...

  8. C#设置窗体最大化且不遮挡任务栏的方法

    C#设置窗体最大化示例: 也可将方法内的内容放到主窗体首次加载load方法中. /// <summary> /// 设置窗体最大化(不遮挡任务栏)但此方法在宽屏中不能显示全屏/// < ...

  9. access窗体最大化到软件大小

    Private Sub Form_Load()DoCmd.ShowToolbar "Ribbon", acToolbarNo '窗体最大化,占满软件最 End Sub

随机推荐

  1. Mac 配置 php-fpm 时出现'/private/etc/php-fpm.conf': No such file or directory (2)

    https://github.com/musicode/test/issues/5 Mac 自带 php-fpm,在终端执行 php-fpm,会报如下错误: ERROR: failed to open ...

  2. Xcode同一个Workspace中两个工程依赖于Undefined Symbol Error

    Workspace中包含两个工程A和B: A是dylib工程,引用了另一个动态库C,B需要链接(依赖)A库.当编译B时,会先编译A,然后把A生成的dylib拷贝到B的生成目录中.如果要运行B的话需要把 ...

  3. javascript的console.log用法

    f1.html代码 <iframe id="frame2" name="frame1" src="ww.html"></i ...

  4. GCD总结

    //用block只有两种:同步执行/异步执行(参数1:队列;参数二:任务) dispatch_async(dispatch_get_global_queue(0, 0),^{ });//异步在新的线程 ...

  5. [转]C语言SOCKET编程指南

    1.介绍 Socket编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等 ...

  6. 1.1、MyEclipse自定义注释

    一.修改进入路径: Window->Preference->Java->Code Style->Code Template->Comments 二:编辑自定义注释 文件  ...

  7. ASP.NET 显示项目之外的图片

    1.<asp:Image>标签的使用Loginer.images是图片的路径 this.images.ImageUrl = "showImg.aspx?imgFile=" ...

  8. 通过akRegionCode找到对应的程序

    在Oracle EBS中,有一些程序是从上一个版本的Web开发框架(AK)转成OAF的,而这部分程序定义的功能与一般的OAF页面不同,OAF页面使用 OA.jsp?page=/oracle/apps/ ...

  9. .net MVC中异常日志

    在日常工作中,我们有些项目可能进入了维护期,但是项目可能存在一些潜伏较深的bug导致我们在测试阶段并未发现,那么错误日志记录为我们的项目维护起着重要的作用.记录系统日志的方法如下 1.在系统根目录建立 ...

  10. gulp工具rename

    gulp 对文件批量重命名 gulp-rename重命名 var gulp = require('gulp'); var rename = require("gulp-rename" ...