为窗体添加 最大化,最小化,还原等 事件
生活随笔
收集整理的這篇文章主要介紹了
为窗体添加 最大化,最小化,还原等 事件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為窗體添加 "最大化","最小化","還原"等 事件
????????????????????????????????????????????????????????????????????????????電子科技大學軟件學院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;
????????}
????}
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
????}
}
其中最重要的部分是 protected override void WndProc(ref Message m) , 它捕獲了發給窗體的消息, 關于消息的常量值可以在winuser.h中找到,關于消息的具體含義可以在WindowsSDK中找到.
更多的, 你可以利用protected override void WndProc(ref Message m) 創建更多事件.
????????????????????????????????????????????????????????????????????????????電子科技大學軟件學院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;
????????}
????}
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
????}
}
其中最重要的部分是 protected override void WndProc(ref Message m) , 它捕獲了發給窗體的消息, 關于消息的常量值可以在winuser.h中找到,關于消息的具體含義可以在WindowsSDK中找到.
更多的, 你可以利用protected override void WndProc(ref Message m) 創建更多事件.
轉載于:https://www.cnblogs.com/zhouyinhui/archive/2007/01/12/619175.html
總結
以上是生活随笔為你收集整理的为窗体添加 最大化,最小化,还原等 事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 499元的国产安卓8英寸平板要来了!或有
- 下一篇: 建模就用Rose的时代宣告结束