C#截获窗体消息

重载C#From的函数

上面的工作需要重载Form的一些函数,这样才能完成,这里首先了解一个知识点:怎么重载Form的函数?

在建立好一个WinForm的工程之后,我们可以用下面的方法找到可以重载的Form方法:

(1)弹出对象浏览器

(2)选择基类型From

(3)对象浏览器设置

(4)加入重载方法,以DefWndProc为例

这样就可以在需要的地方重载这个函数了,这是一个很好的方法。因为方法重载的时候一般不要自己写这个重载的函数,要从基类中copy这个函数。

截获C#Form消息

先来说接受窗体消息,然后根据截获的消息做一些定制的处理。

首先要重载一个WndProc的函数,用于接收消息,同时对消息做相应的处理

然后在这个函数中写消息的处理代码:

protected override void WndProc(ref Message m)
{
	const int WM_SYSCOMMAND = 0x0112;
	const int SC_CLOSE = 0xF060;

	if(m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)
	{
		//this.WindowState = FormWindowState.Minimized;
		this.Hide();
		return;
	}

	base.WndProc(ref m);
}//WndProc()

  这个函数知识截获WM_SYSCOMMAND的SC_CLOSE消息,其他的消息还是要交给基类Form的消息处理函数base.WndProc。

时间: 2024-11-06 21:54:59

C#截获窗体消息的相关文章

用ImessageFilter接口实现截获键盘消息

阿里妹导读:以深度学习为代表的人工智能在图像.语音和NLP领域带来了突破性的进展,在信息检索和个性化领域近几年也有不少公开文献,比如wide& deep实现了深度模型和浅层模型的结合,dssm用于计算语义相关性,deepfm增加了特征组合的能力,deep CF用深度学习实现协同过滤,rnn recommender 采用行为序列预估实现个性化推荐等. 工业级的信息检索或个性化系统是一个复杂的系统工程,深度学习的工业级应用需要具备三个条件:强大的系统计算能力,优秀的模型设计能力和合适的应用场景.今天

Delphi中window消息截获的实现方式(2)

Delphi是Borland公司提供的一种全新的WINDOWS编程开发工具.由于它采用了具有弹性的和可重用的面向对象Pascal(object-orientedpascal)语言,并有强大的数据库引擎(BDE),快速的代码编译器,同时又提供了众多出色的构件.受到广大编程人员的青睐.在众多的编程语言(如VB,PowerBuilder,Powerpoint等)中脱颖而出.其中一个DELPHI强于其他编程语言(如VB4.0)的地方就是在DELPHI中可自定义消息,并可直接处理消息.这对于那些希望编写自

截获消息

第一步:经入虚拟界面,登录账户root,秘密toor 第二步:根据需要调分辨率,点开界面最右上角的图标,出来all setting界面在选择进入displays在进入图片中的图标,选择分辨率. 第三步:配ip 在右下角有小电脑图标,点进去把网络改成桥接模式.在点击图片的黄色字部分, 选择wired 1 填写ip ,网关等 第四步: 打开第二个图片出来写命令界面 ifconfig(查看是否配好ip) ping 172.28.15.55 arpspoof -i /*echo 1 > /proc/sy

深入windows的关机消息截获-从XP到Win7的变化(在XP中程序可以阻止关机,但是在Win7中程序无法阻止关机,可Block的时间从1秒调到了5秒) good

之前写了一个软件用于实验室的打卡提醒,其中一个重要的功能是在关机之前提醒当天晚上是否已经打卡.之前我是在WM_ENDSESSION中弹出一个模态对话框来提醒,在XP中基本工作正常,在Win7中大多数时候工作正常,但是有时候会出现不提醒现象.我想这中间是不是有什么玄机,Windows的关机方案从XP到Win7到底发生了什么变化,如何进行有效的截获Windows关机消息.对此,我搜寻了MSDN和网上论坛结合自己的测评给出一个完善的描述和解决方案,如果你有类似的需求,可以参考这篇文章. 在MSDN中对

MFC消息截获之pretranslatemessage

前几天,查了一个batch的问题,问题大致是这样,父窗口消息一个鼠标消息,弹出一个模态框,CPU负荷就飚升到100%(双核就是50%),非常怪异,用windbg,分析哪个线程占用CPU,定位到鼠标响应函数,也就是弹出模态框的函数,windbg提供的信息有限,只能自己分析,经过各种尝试,发现与模态框里面的控件无关,所以应该还是父窗口的问题,仔细看了下父窗口的代码,发现父窗口为了截获F1按下的消息,而重载了Pretranslatemessage,而Pretranslatemessage返回值都是真!

深入windows的关机消息截获-从XP到Win7的变化

之前写了一个软件用于实验室的打卡提醒,其中一个重要的功能是在关机之前提醒当天晚上是否已经打卡.之前我是在WM_ENDSESSION中弹出一个模态对话框来提醒,在XP中基本工作正常,在Win7中大多数时候工作正常,但是有时候会出现不提醒现象.我想这中间是不是有什么玄机,Windows的关机方案从XP到Win7到底发生了什么变化,如何进行有效的截获Windows关机消息.对此,我搜寻了MSDN和网上论坛结合自己的测评给出一个完善的描述和解决方案,如果你有类似的需求,可以参考这篇文章. 在MSDN中对

窗口绘制有关的消息整理 WM_PAINT, WM_NCPAINT, WM_ERASEBKGND

WM_PAINTWM_PAINT是Windows窗口系统中一条重要的消息,应用程序通过处理该消息实现在窗口上的绘制工作. WM_NCPAINT当窗口客户区以外的部分(如窗口标题栏.菜单栏等)需要需要重画时,系统向程序发出该消息.因标准窗口的客户区以外部分为窗口必需部分,因而该消息将默认被发送到DefWindowProc函数进行默认处理.程序可通过截获该消息来实现窗口其他部分的自定义绘制. WM_ERASEBKGND The WM_ERASEBKGND message is sent when t

窗体皮肤实现 - 在VC中简单实现绘制(五)

到第四部分Delphi XE3的代码能基本完成窗体界面的绘制.窗口中的其他控件的处理方法也是相同的,截获消息处理消息. 问题这个编译出来的个头可不小.Release版本竟然2.43M,完全是个胖子.系统中应该加入了大量基础代码(如泛型之类),用Delphi7编译出来应该能小一截. 使用默认Release的配置方案,没有第三方控件. 翻译到C++进行实验,发现明显这个个头没法比.Debug版本88.5K...---  这货确实小.可惜再小现公司项目也不会考虑用C++开发,有些悲剧. C版本只实现了

C# 绘制窗体客户非客户区要用WM_PAINT和WM_NCPAINT

窗体分为两部分:客户区(Client area)和非客户区(Non-Client area) WM_PAINT消息.OnPaint()方法.GetDC()API函数都是处理窗体客户区绘制的   而标题栏处于非客户区中,所以WM_PAINT消息.OnPaint()方法.GetDC()API函数都用不上   GetWindowDC()是获得整个窗体的画布句柄(Device Context翻译为:设备清单,我习惯称为画布句柄),包括非客户区   GDI的绘制都离不开DC,因为操作系统必须知道你要在什么