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

歡迎訪問 生活随笔!

生活随笔

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

C#

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

發布時間:2025/4/14 C# 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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消息处理的全部內容,希望文章能夠幫你解決所遇到的問題。

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