WndProc函数(转)
WndProc函数作用:
主要用在拦截并处理系统消息和自定义消息
比如:
windows程序会产生很多消息,比如你单击鼠标,移动窗口都会产生消息。这个函数就是默认的消息处理函数。你可以重载这个函数来制定自己的消息处理流程.
在CS中,可以重写WndProc函数,来捕捉所有发生有窗口消息。
这样,我们就可以"篡改"传入的消息,而人为的让窗口改变行为。
代码实例:
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private Demo demo= null; private void Form1_Load(object sender, EventArgs e) { demo= new Demo(this.Handle.ToInt32()); } private void button1_Click(object sender, EventArgs e) { demo.Test(); } protected override void WndProc(ref Message m) { if (m.Msg == Demo.MY_MSG_BEGIN) { MessageBox.Show("类Demo for循环开始."); } else if (m.Msg == Demo.MY_MSG_END) { MessageBox.Show("类Demo for循环结束."); } base.WndProc(ref m); } }
public class Demo { private int m_hWnd = 0; public Demo(int hWnd) { m_hWnd = hWnd; } private const int WM_USER = 0x0400; public static int MY_MSG_BEGIN = WM_USER + 100; public static int MY_MSG_END = WM_USER + 101; [DllImport("User32.DLL")] public static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam); public void Test() { SendMessage(m_hWnd, MY_MSG_BEGIN, 0, 0); for (int i = 0; i < 100000; i++) { Application.DoEvents(); } SendMessage(m_hWnd, MY_MSG_END, 0, 0); } }