WndProc
是操作系统与你的程序“对话”的通道。当用户点击鼠标、按下键盘,或系统事件(如窗口移动)发生时,Windows 会将这些事件打包成“消息”,发送给你的窗口,而 WndProc
就是接收和处理这些消息的函数。
WndProc
接收四个参数,对应一条消息的全部信息:
protected override void WndProc(ref Message m) // C# 写法
{// m.Msg -> 消息类型(例如:鼠标点击、键盘按下)// m.WParam -> 附加信息1(例如:按了哪个键)// m.LParam -> 附加信息2(例如:鼠标点击的坐标)// m.HWnd -> 接收消息的窗口句柄(窗口的身份证)
}
如何用?三步搞定
✅ 1. 重写 WndProc 方法
在 C# WinForm 窗体代码中直接重写:
public partial class MyForm : Form
{protected override void WndProc(ref Message m){// 你的处理逻辑写在这里base.WndProc(ref m); // 其他消息交给系统处理}
}
✅ 2. 识别并处理消息
例如:拦截关闭按钮,改为最小化窗口:
protected override void WndProc(ref Message m)
{const int WM_CLOSE = 0x0010;if (m.Msg == WM_CLOSE){this.WindowState = FormWindowState.Minimized; // 不关闭,最小化return; // 不再传递消息}base.WndProc(ref m); // 其他消息正常处理
}
✅ 3. 实现快捷键检测
例如:按下 Ctrl + S
时自动保存:
protected override void WndProc(ref Message m)
{const int WM_HOTKEY = 0x0312;const int CTRL_S = 0x0001 + (int)Keys.S; // 组合键标识if (m.Msg == WM_HOTKEY && m.WParam.ToInt32() == CTRL_S){SaveFile(); // 执行保存return;}base.WndProc(ref m);
}