1.背景介绍:

  c#程序想要针对某个的消息进行别的行为。例如:窗体不可拖动。

2.应用函数WinProc

  以窗口不可拖动举例:

const int WM_NCLBUTTONDOWN = 0x00A1;//当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息
        const int HTCAPTION = 2;//表示鼠标在窗口标题栏时的系统信息
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_NCLBUTTONDOWN && m.WParam.ToInt32() == HTCAPTION)
                return;
            base.WndProc(ref m);
        }

 3.原理:

拦截并处理系统消息和自定义消息:windows程序会产生很多消息,比如你单击鼠标,移动窗口都会产生消息。这个函数就是默认的消息处理函数。你可以重载这个函数来制定自己的消息处理流程.在Winform程序中,可以重写WndProc函数,来捕捉所有发生的窗口消息。这样,我们就可以"篡改"传入的消息,而人为的让窗口改变行为。