为窗体添加 "最大化","最小化","还原"等 事件
                                                                            电子科技大学软件学院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

为窗体添加 最大化,最小化,还原等 事件相关推荐

  1. Windows快捷键 - 最大化 最小化 还原

    我是一个键盘控型选手. 这个习惯来自最初是受MnOz同学的影响(可见身边有个好人是多么重要 ,咳咳,现在我归宝宝管 ). 关于[最大化 最小化 & 还原], 以前经常使用F11来控制资源管理器 ...

  2. MFC手动添加窗口 最大化 最小化 还原 关闭

    最大化.最小化.还原 这些都是系统命令 这样操作比较合理 C/C++ code? 1 2 3 PostMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0); PostMessa ...

  3. Qt之界面实现技巧——包括任务栏不显示,自定义窗体,最大化最小化按钮等等全面总结

    总结一下,在开发Qt的过程中的一些技巧!可遇而不可求... 一.主界面 1.窗口 最小化 最大化 关闭按钮.显示状态自定义 setWindowFlags(Qt::CustomizeWindowHint ...

  4. C#程序实现窗体的最大化/最小化

    C#代码实现: private void button1_Click(object sender, EventArgs e) {this.WindowState = FormWindowState.M ...

  5. QDialog添加最大化最小化按钮

    只需要在构造函数中加入 this->setWindowFlags(Qt::WindowMinMaxButtonsHint); 即可.另外,如下方法 Qt::WindowFlags windowF ...

  6. html最小化窗口,[转载]js实现窗口(支持拉伸,拖拽,最大化,最小化,滚动

    雨亭原创,转载注明 执行效果: 一窗体实现的功能: 1.鼠标拖动. 2.八个方向的拉伸. 3.可定制窗口标题,内容(文本或HTML),初始大小和位置,最小宽度,高度. 4.支持滚动条. 5.关闭窗体. ...

  7. [乱说]Electron 无边框窗口最大化最小化关闭功能

    title: '[乱说]Electron 无边框窗口最大化最小化关闭功能' date: 2017-11-21 21:43:40 tags: Electron 无边框窗口最大化最小化关闭功能 目的 实现 ...

  8. excel窗体最大化最小化_最小化Excel 2007功能区

    excel窗体最大化最小化 If you're working on a big worksheet, you might want to see as many rows as possible. ...

  9. Qt 窗口的一些简单设置-标题、图标、最大化最小化按钮、任务栏图标

    一些很零散的窗体控制方法,在这总结一些. 1.更改窗体标题 this->setWindowTitle("窗体标题"); 窗体标题"就是更改的窗体标题 2.控制窗体大 ...

最新文章

  1. 关于学习过程中走过的弯路
  2. Python把数据存储到CSV
  3. python zipfile 模块下中文乱码 '╡┌╥╗╒┬_╒╨▒Ω╣½╕µ.docx'
  4. 蚌埠粮食经济技师学院计算机,安徽粮食经济技师学院2020年有哪些专业
  5. mysql数据库入门教程(15):流程控制结构
  6. 中国十大最美梯田,个个都美如画!
  7. clodeblocks debug断点调试_idea debug调试————简单常用,适合初学者
  8. 蓝桥杯第六届国赛JAVA真题----切开字符串
  9. 解决pytorch CrossEntropyLoss报错RuntimeError: 1D target tensor expected, multi-target not supported
  10. swift版 二分查找 (折半查找)
  11. 为什么这款 CPU 在亚马逊上卖得最火?
  12. Ubuntu 15.10开机启动到命令行模式-转
  13. 【Java】JSON数据交换格式及其使用案例(聊天工具)
  14. Beta阶段第三次网络会议
  15. 项不会计算为接受 0 个参数的函数_玩转excel函数:详解四种计数函数,从基础到提高...
  16. python清华大学出版社答案_Python机器学习及实践
  17. python产生随机数的函数_Python 随机数函数
  18. C语言自制小游戏:三子棋(井字棋)游戏(超详细)
  19. 星巴克咖啡教室活动体验如何?
  20. Android Apk编译的apk安装失败解决

热门文章

  1. Failed to connect to driver at XXXXXXx
  2. ubuntu云主机上Flask+uwsgi+Nginx配置
  3. 第4章-机器学习基础
  4. Sqlite3 for Linux 可视化工具
  5. NLPIR RuntimeError: NLPIR function 'NLPIR_Init' failed 解决方案
  6. SQL 单一用户(解决)
  7. 页面加载成功后调用_在微信小程序里实现图片预加载组件
  8. java基础知识陷阱
  9. Java 比特币开发系列教程汇总
  10. 分隔list,让页面成多行多列遍列