C#WinForm窗体监听/拦截操作动作

本文探讨了C#中的事件机制及其与WndProc函数的结合使用,特别是如何在WndProc函数中拦截和处理系统消息,如窗口关闭命令(SC_CLOSE),以实现特定的功能。通过实例展示了如何在接收到WM_SYSCOMMAND消息并识别为窗口关闭命令时,改变窗口状态为最小化而非完全关闭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#中的事件也是通过封装系统消息来实现的,如果你在WndProc函数中不处理该消息

那么,它会被交给系统来处理该消息,系统便会通过代理来实现鼠标单击的处理函数,因此你可以通过

WndProc函数来拦截消息

  1. protected override void WndProc(ref Message m)  
  2.        {  
  3.            const int WM_SYSCOMMAND = 0x0112;  
  4.            const int SC_CLOSE = 0xF060;  
  5.   
  6.            if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)  
  7.            {  
  8.                // 屏蔽传入的消息事件   
  9.                this.WindowState = FormWindowState.Minimized;  
  10.                return;  
  11.            }  
  12.            base.WndProc(ref m);  
  13.        }  
  14.   
  15.        protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)  
  16.        {  
  17.            int WM_KEYDOWN = 256;  
  18.            int WM_SYSKEYDOWN = 260;  
  19.   
  20.            if (msg.Msg == WM_KEYDOWN | msg.Msg == WM_SYSKEYDOWN)  
  21.            {  
  22.                switch (keyData)  
  23.                {  
  24.                    case Keys.Escape:  
  25.                        this.Close();  
  26.   
  27.                        break;  
  28.                }  
  29.            }  
  30.            return false;  
  31.        }  

转载于:https://www.cnblogs.com/liujiaknowledge/p/5035682.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值