C#重写WndProc方法,截获WM_NCHITTEST消息,并通过消息的返回值找出鼠标的当前位置.

private const int WM_NCHITTEST = 0x84;
 
        /// <summary>
        /// 重写WndProc方法,截获WM_NCHITTEST消息,并通过消息的返回值找出鼠标的当前位置.
        /// </summary>
        /// <param name="m"></param>
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case WM_NCHITTEST:
                    {
                        ///让父类调用一次,以便能获取m的返回值
                        base.WndProc(ref m);
                        switch ((int)m.Result)
                        {
                            case 1: Text = "客户区";
                                break;
                            case 10: Text = "左边缘";
                                break;
                            case 11: Text = "右边缘";
                                break;
                            case 12: Text = "上边缘";
                                break;
                            case 18: Text = "窗口底部";
                                break;
                            case 15: Text = "下边缘";
                                break;
                            case 13: Text = "左上斜角";
                                break;
                            case 14: Text = "右上斜角";
                                break;
                            case 16: Text = "左下斜角";
                                break;
                            case 17: Text = "右下斜角";
                                break;
                            default:
                                break;
                        }
                        break;
                    }

                default: break;
            }
            
            base.WndProc(ref m);
        }

作者: 正月龙   发布时间: 2011-03-11