让窗体从初始时就保持最大化,并且不能改变窗体大小的完美解决方案
2005-07-28 14:24
344 查看
我的要求就是让窗体从初始化的时候就最大化,并且用户不能改变窗体大小。最开始的想法是捕获窗体大小改变,即ReSize事件,然后在事件里面把窗体大小设置成初始时的大小。完整的Form.cs代码如下:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication5
用这种方法的话,基本没有什么问题。但是在窗体大小改变的时候,不知道为什么(可能是要处理事件,可能是要窗体重绘,我不清楚,希望有人告诉我),会使得窗体在不断地闪烁。这对我来说就不算完美了。后来我的一个叫HAL的网友给了我如下的解决方案,个人认为比较完美的了。
其实说起来也不复杂,就是直接重写Windows窗体处理消息的过程,即WndProc方法。在这个方法里面,我们检测窗体大小恢复以及在非客户区域双击鼠标左键的消息,不处理这两个消息。这样就可以实现在窗体画面不闪动的条件下也保持其大小了。完整Form.cs文件如下:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication3
之所以要在Restore消息里面检测是否当前状态是最大化,是因为如果不检测的话,那么在最小化该窗体后就无法再打开了,因为Restore消息都被屏蔽掉了。
还有很重要的一点就是:必须要将窗体的FormBorderStyle设置为FixedSingle,当然只要是Fixed的,不一定要是FixedSingle。因为如果不是Fixed,那么可以通过在任务栏上右键菜单里面的大小操作来改变窗体的大小。
也许很多高手都有其他的方法,或者觉得我这个方法也有问题。欢迎指正,提前感谢了!
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication5
用这种方法的话,基本没有什么问题。但是在窗体大小改变的时候,不知道为什么(可能是要处理事件,可能是要窗体重绘,我不清楚,希望有人告诉我),会使得窗体在不断地闪烁。这对我来说就不算完美了。后来我的一个叫HAL的网友给了我如下的解决方案,个人认为比较完美的了。
其实说起来也不复杂,就是直接重写Windows窗体处理消息的过程,即WndProc方法。在这个方法里面,我们检测窗体大小恢复以及在非客户区域双击鼠标左键的消息,不处理这两个消息。这样就可以实现在窗体画面不闪动的条件下也保持其大小了。完整Form.cs文件如下:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication3
之所以要在Restore消息里面检测是否当前状态是最大化,是因为如果不检测的话,那么在最小化该窗体后就无法再打开了,因为Restore消息都被屏蔽掉了。
还有很重要的一点就是:必须要将窗体的FormBorderStyle设置为FixedSingle,当然只要是Fixed的,不一定要是FixedSingle。因为如果不是Fixed,那么可以通过在任务栏上右键菜单里面的大小操作来改变窗体的大小。
也许很多高手都有其他的方法,或者觉得我这个方法也有问题。欢迎指正,提前感谢了!
相关文章推荐
- 打飞机游戏的基本框架:固定窗体位置,不能随意改变窗体大小
- delphi Form属性设置 设置可实现窗体无最大化,并且不能拖大拖小
- 当窗体最大化后,如何让窗体里面的控件也随之改变大小和位置
- 去掉窗体的边框,并且禁止拖动改变窗体大小
- C#关于控件随窗体的改变而自动调整大小并且能重新定位的一些简单介绍和控件随窗体改变自适应类
- 窗口样式:禁止最大化,不能拖动边框以改变窗口大小
- delphi Form属性设置 设置可实现窗体无最大化,并且不能拖大拖小
- C#使窗体无法改变大小只能最大化最小化显示的方法
- Qt 无边框窗体改变大小 完美实现
- 利用Windows消息循环,使窗体不能改变大小
- 不能改变大小的窗体
- 如何设置C#窗体大小不能改变
- Qt 无边框窗体改变大小 完美实现
- C#的WinForm中如何让窗体大小不能改变
- Qt 无边框窗体改变大小 完美实现
- MFC SDI 使窗口最大化,并不能改变窗口大小
- s:textarea 标签不能改变大小的解决方案
- [Win32]只允许最大化最小化窗口,禁止双击标题栏、拖动窗体、点击复原按钮来改变窗口大小
- Qt 无边框窗体改变大小 完美实现(全部自己实现)
- 可拖动的无标题栏窗体,并且可以通过拉拽改变窗体大小。