winform 在mdi窗口重绘界面时,mdi挡住主窗体,导致鼠标拖动缩放窗体大小失效的解决方法随笔

   #endregion
        protected override void OnControlAdded(ControlEventArgs e)
        {
            base.OnControlAdded(e);
            this.label1.Text +=e.Control.GetType().Name;
            if (e.Control.GetType().Name == "MdiClient")
            {

                MdiClient mc = (MdiClient)e.Control;
                mc.Dock = DockStyle.None;
                mc.ClientSize = new Size(new  Point(this.Width - 2, this.Height - 2));
                mc.Location = new Point(1, 1);
               
            }
           
        }
       

        //窗体缩放
        protected override void WndProc(ref Message m)
        {
           
           
            base.WndProc(ref m);
            switch (m.Msg)
            {
                    //ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.WIN32COM.v10.en/winui/winui/windowsuserinterface/userinput/mouseinput/mouseinputreference/mouseinputmessages/wm_nchittest.htm
                case WM_NCHITTEST:
                    Point vPoint = new Point((int)m.LParam & 0xFFFF,
                        (int)m.LParam >> 16 & 0xFFFF);
                    vPoint = PointToClient(vPoint);
                    if (vPoint.X <= 5)
                        if (vPoint.Y <= 5)
                            m.Result = (IntPtr)HTTOPLEFT;
                        else if (vPoint.Y >= ClientSize.Height - 5)
                            m.Result = (IntPtr)HTBOTTOMLEFT;
                        else m.Result = (IntPtr)HTLEFT;
                    else if (vPoint.X >= ClientSize.Width - 5)
                        if (vPoint.Y <= 5)
                            m.Result = (IntPtr)HTTOPRIGHT;
                        else if (vPoint.Y >= ClientSize.Height - 5)
                            m.Result = (IntPtr)HTBOTTOMRIGHT;
                        else m.Result = (IntPtr)HTRIGHT;
                    else if (vPoint.Y <= 5)
                        m.Result = (IntPtr)HTTOP;
                    else if (vPoint.Y >= ClientSize.Height - 5)
                        m.Result = (IntPtr)HTBOTTOM;
                    break;
            }
      
        }

主要是由于mdi的窗体挡住了主窗体form 导致重写的WndProc接受不到windows消息,重写OnControlAdded 将mdi窗体控件缩小1像素

posted @ 2009-11-18 16:00  Sean.Z  阅读(227)  评论(0编辑  收藏  举报