日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为窗体添加 最大化,最小化,还原等 事件

發布時間:2023/12/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为窗体添加 最大化,最小化,还原等 事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為窗體添加 "最大化","最小化","還原"等 事件
????????????????????????????????????????????????????????????????????????????電子科技大學軟件學院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

總結

以上是生活随笔為你收集整理的为窗体添加 最大化,最小化,还原等 事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。