http://blog.csdn.net/xochenlin/article/details/4328954
C# Winform中WndProc 函数作用:
主要用在拦截并处理系统消息和自定义消息
比如:
windows程序会产生很多消息,比如你单击鼠标,移动窗口都会产生消息。这个函数就是默认的消息处理函数。你可以重载这个函数来制定自己的消息处理流程.在Winform程序中,可以重写WndProc函数,来捕捉所有发生的窗口消息。
这样,我们就可以"篡改"传入的消息,而人为的让窗口改变行为。
简单测试代码:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace ControlTest{ 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 = new Demo(this.Handle.ToInt32()); 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); } } }