为窗体添加 "最大化","最小化","还原"等 事件
来源:互联网 发布:白领学化妆 知乎 编辑:程序博客网 时间:2024/06/06 03:08
为窗体添加 "最大化","最小化","还原"等 事件
电子科技大学软件学院03级02班 周银辉
在.Net3.0以前的版本中(Form类)都没有与窗口最大化、最小化等相关的事件, 这让人很郁闷. ( .Net3.0的Window类中添加了该事件"StateChanged "). 这里来重写Form类以便添加这几个事件.
1, 参数 WindowStateChangedEventArgs
2, 继承Form类并添加事件WindowStateChanged
其中最重要的部分是 protected override void WndProc(ref Message m) , 它捕获了发给窗体的消息, 关于消息的常量值可以在winuser.h中找到,关于消息的具体含义可以在WindowsSDK中找到.
更多的, 你可以利用protected override void WndProc(ref Message m) 创建更多事件.
文章来源于 http://www.cnblogs.com/zhouyinhui 版权归原作者所有
电子科技大学软件学院03级02班 周银辉
在.Net3.0以前的版本中(Form类)都没有与窗口最大化、最小化等相关的事件, 这让人很郁闷. ( .Net3.0的Window类中添加了该事件"StateChanged "). 这里来重写Form类以便添加这几个事件.
1, 参数 WindowStateChangedEventArgs
/**//// <summary>
/// 包含窗口状态变化时的相关数据
/// </summary>
public class WindowStateChangedEventArgs : EventArgs
{
private readonly FormWindowState oldState;
private readonly FormWindowState newState;
public FormWindowState OldState
{
get
{
return oldState;
}
}
public FormWindowState NewState
{
get
{
return newState;
}
}
public WindowStateChangedEventArgs(FormWindowState oldState, FormWindowState newState)
{
this.oldState = oldState;
this.newState = newState;
}
}
/// 包含窗口状态变化时的相关数据
/// </summary>
public class WindowStateChangedEventArgs : EventArgs
{
private readonly FormWindowState oldState;
private readonly FormWindowState newState;
public FormWindowState OldState
{
get
{
return oldState;
}
}
public FormWindowState NewState
{
get
{
return newState;
}
}
public WindowStateChangedEventArgs(FormWindowState oldState, FormWindowState newState)
{
this.oldState = oldState;
this.newState = newState;
}
}
2, 继承Form类并添加事件WindowStateChanged
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace MDIHelper
{
public partial class CustomForm : Form
{
//记录状态变化之前的状态
private FormWindowState preWindowState = FormWindowState.Normal;
public CustomForm()
{
InitializeComponent();
}
事件#region 事件
/**//// <summary>
/// 窗口状态改变时发生
/// </summary>
public event EventHandler<WindowStateChangedEventArgs> WindowStateChanged;
protected virtual void OnWindowStateChanged(WindowStateChangedEventArgs arg)
{
if (this.WindowStateChanged != null)
{
this.WindowStateChanged(this, arg);
}
}
#endregion
重写的方法#region 重写的方法
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0005://change size: WM_SIZE
{
FormWindowState newState = FormWindowState.Normal;
switch (m.WParam.ToInt32())
{
case 0://SIZE_RESTORED
newState = FormWindowState.Normal;
break;
case 1://SIZE_MINIMIZED
newState = FormWindowState.Minimized;
break;
case 2://SIZE_MAXIMIZED
newState = FormWindowState.Maximized;
break;
default:
break;
}
if (newState != this.preWindowState)
{
this.OnWindowStateChanged(new WindowStateChangedEventArgs(this.preWindowState, newState));
this.preWindowState = newState;
}
}
break;
default:
break;
}
base.WndProc(ref m);
}
#endregion
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace MDIHelper
{
public partial class CustomForm : Form
{
//记录状态变化之前的状态
private FormWindowState preWindowState = FormWindowState.Normal;
public CustomForm()
{
InitializeComponent();
}
事件#region 事件
/**//// <summary>
/// 窗口状态改变时发生
/// </summary>
public event EventHandler<WindowStateChangedEventArgs> WindowStateChanged;
protected virtual void OnWindowStateChanged(WindowStateChangedEventArgs arg)
{
if (this.WindowStateChanged != null)
{
this.WindowStateChanged(this, arg);
}
}
#endregion
重写的方法#region 重写的方法
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0005://change size: WM_SIZE
{
FormWindowState newState = FormWindowState.Normal;
switch (m.WParam.ToInt32())
{
case 0://SIZE_RESTORED
newState = FormWindowState.Normal;
break;
case 1://SIZE_MINIMIZED
newState = FormWindowState.Minimized;
break;
case 2://SIZE_MAXIMIZED
newState = FormWindowState.Maximized;
break;
default:
break;
}
if (newState != this.preWindowState)
{
this.OnWindowStateChanged(new WindowStateChangedEventArgs(this.preWindowState, newState));
this.preWindowState = newState;
}
}
break;
default:
break;
}
base.WndProc(ref m);
}
#endregion
}
}
其中最重要的部分是 protected override void WndProc(ref Message m) , 它捕获了发给窗体的消息, 关于消息的常量值可以在winuser.h中找到,关于消息的具体含义可以在WindowsSDK中找到.
更多的, 你可以利用protected override void WndProc(ref Message m) 创建更多事件.
文章来源于 http://www.cnblogs.com/zhouyinhui 版权归原作者所有
- 为窗体添加 "最大化","最小化","还原"等 事件
- 为窗体添加 "最大化","最小化","还原"等 事件
- 窗体添加 "最大化","最小化","还原" 事件
- QT实现无边框窗体的最小化,最大化/还原,关闭,拖动和双击最大化等功能
- 用程序控制窗体最大化、最小化、还原
- 捕捉窗体的最小化、最大化、还原消息
- C# 窗体最大化,最小化,还原 的代码
- 为Fedora 16 窗口 添加最大化、最小化、关闭等按钮
- Delphi最大化最小化、窗体变化事件
- C# 捕获窗体最大化和最小化事件
- C# 捕获窗体最小化、最大化事件
- VB 窗体最大化,最小化,拖拽事件
- pb 窗体最大化最小化触发事件
- Delphi中捕捉窗体的最小化、最大化、还原消息
- C#WinForm窗体的最大化最小化及还原
- C#WinForm窗体的最大化最小化及还原
- 不拖动标题栏移动窗体,最大化窗体,最小化窗体,还原窗体
- 最大化/最小化/还原/关闭以及按钮图片的添加
- 间隙缓冲区
- 获奖啦, 微软亚洲研究院第九届学生实践项目
- [转]让用户通过宏和插件向您的 .NET 应用程序添加功能
- 让集合支持事件
- .net 2.0 文档生成工具
- 为窗体添加 "最大化","最小化","还原"等 事件
- [转]面向对象设计原则
- 像苹果工具条一样平滑连续地缩放
- 关于使用TestDriven.Net 2.0的一点补充
- 好玩! 一句代码,打造一个词霸
- XNA Game Studio Express 1.0正式版 发布
- XNA中的鼠标,键盘与操纵杆
- [转]关于安装配置XNA开发环境的详细说明
- 新手老问题---------跨线程的控件访问