欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > C# >内容正文

C#

C# winform自己实现Windows消息处理

发布时间:2025/4/14 C# 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C# winform自己实现Windows消息处理 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Windows消息循环是Windows系统机制之一。在Win32的窗口程序中,一部分是通过WndProc这个函数来完成的。
在C# winform中,编程时看不到WndProc函数。但是form的基类还是存在消息循环和WndProc。form的事件是用消息包装出来的。
如果要实现一些特殊增强功能,可以考虑在form中自己处理Windows消息。
实现的方法,只需重载 WndProc 函数便可完成消息响应。
下面做一个简单示例。使用SharpDevelop;

/** Created by SharpDevelop.* User: Administrator* Date: 2020/11/12/周四* Time: 0:35* * To change this template use Tools | Options | Coding | Edit Standard Headers.*/ using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms;namespace mymsgdemo {/// <summary>/// Description of MainForm./// </summary>public partial class MainForm : Form{private const int WM_SIZE=0x0005; //窗口大小改变完成消息private const int WM_SIZEING = 0x0214; //窗口正在改变大小消息public MainForm(){//// The InitializeComponent() call is required for Windows Forms designer support.//InitializeComponent();//// TODO: Add constructor code after the InitializeComponent() call.//} protected override void WndProc(ref System.Windows.Forms.Message m ){switch(m.Msg) { case WM_SIZEING:this.BackColor=Color.MediumSeaGreen;break;case WM_SIZE:this.BackColor=Color.FromName("Control");break;default: base.WndProc(ref m); // 调用基类函数处理其他消息。 break; } }} }

继承基类的WndProc函数;在其中处理2个消息;WM_SIZE,WM_SIZEING;

在处理消息的switch中,每个消息占一个分支,另外default要调用基类的WndProc函数,来处理其他消息;

收到WM_SIZEING消息(窗口正在改变大小),改变窗口背景色为Color.MediumSeaGreen;收到WM_SIZE消息(窗口改变大小完成),恢复窗口背景原先的背景色,Color.FromName("Control");

运行一下程序;程序运行起来效果并不好;当改变窗口大小时,窗口背景出现一种闪动的绿色,大小改变完,回复正常背景;

主要是演示一下这一机制;

总结

以上是生活随笔为你收集整理的C# winform自己实现Windows消息处理的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。