求助:如何用代码实现窗体拖动或者改变大小时出现虚线边框,顺便散分
小弟我手头在做的一个2.0的项目, 
 把Form重画了,做了个自己的皮肤。 
 但是发现.Net重绘窗体的效率太低,拖动或者改变窗体大小时会有非常厉害的延迟,拖动的时候非常恐怖。 
 开了双缓冲也没有好转。 
 所以我想回避拖动和改变大小时整个窗体重绘的问题,改用MouseDown时出现窗体的虚框,调整好后MouseUp时需框消失并且按照虚框的大小和位置设置窗体大小位置。 
 但是我不知道怎么实现这个功能。   
 思路有,但是不知道怎么将边框延伸到窗体以外的部分。 
 还有调整大小和移动…… 
 混乱ing   
 或者大家推荐下好的解决重绘的问题的方法?   
 小弟拜谢啦~ 
 顺便散散分,聚聚人气,呵呵。
------解决方案--------------------沙发沙发帮忙顶
------解决方案--------------------接分~~ 
------解决方案--------------------帮顶。 
------解决方案--------------------4颗猩猩也学人家接分,不知道这么混到4个猩猩的,汗
------解决方案--------------------你所说的窗体其实是伪造的,边框才是重新绘制的窗体。
------解决方案--------------------还有,我自定义窗体调整大小怎么没有像你说的那样恐怖?你是不是上面干太多事了?
------解决方案--------------------直接在系统中设置一下不就可以了
------解决方案--------------------Private HTCAPTION As IntPtr = CType(2, IntPtr) 
     Private HTCLIENT As IntPtr = CType(1, IntPtr) 
     Private WM_NCHITTEST As Integer = 132   
     Protected Overrides Sub WndProc(ByRef m As Message) 
          'ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.chs/CPref17/html/M_System_Windows_Forms_Control_WndProc_1_89703afe.htm#codeExampleToggle 
          '拖动无边框窗体 
         If (m.Msg = WM_NCHITTEST) Then 
             MyBase.WndProc(m) 
             If (m.Result = HTCLIENT) Then 
                 m.Result = HTCAPTION 
             End If 
         Else 
             If (m.Msg = 163) Then 
                  '屏蔽最大化! 
             Else 
                 MyBase.WndProc(m) 
             End If 
         End If 
     End Sub
------解决方案--------------------呵呵,你用其他的方式都会很卡的,自定义窗体用消息接受就可以了,直接让他可以调整大小就是了。   
 这段代码是拖动无边框窗体的,调整大小也是类似的操作,和拖动区别就在于消息值不同罢了——C#我写不大好,你可以自己修改一下 
 private IntPtr HTCAPTION = (IntPtr)2; 
 private IntPtr HTCLIENT = (IntPtr)1; 
 private int WM_NCHITTEST = 132;   
 protected override void WndProc(ref Message m) 
 { 
 	//ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.chs/CPref17/html/M_System_Windows_Forms_Control_WndProc_1_89703afe.htm#codeExampleToggle 
 	//拖动无边框窗体 
 	if ((m.Msg == WM_NCHITTEST)) 
 	{ 
 		base.WndProc(m); 
 		if ((m.Result == HTCLIENT)) 
 		{ 
 			m.Result = HTCAPTION; 
 		} 
 	} 
 	else 
 	{ 
 		if ((m.Msg == 163)) 
 		{ 
 		} 
 		//屏蔽最大化! 
 		else 
 		{ 
 			base.WndProc(m); 
 		} 
 	} 
 }   
 ================================================================== 
 博客空间:http://blog.csdn.net/lovingkiss 
 资源下载:http://download.csdn.net/user/lovingkiss 
 优惠接单开发,组件控件定制开发,成品源代码批发 
 联系方式:Q64180940 全天在线 
 ==================================================================
------解决方案--------------------WM_NULL = $0000;  
   WM_CREATE = $0001;  
   应用程序创建一个窗口  
   WM_DESTROY = $0002;  
   一个窗口被销毁  
   WM_MOVE = $0003;  
   移动一个窗口  
   WM_SIZE = $0005;  
   改变一个窗口的大小  
   WM_ACTIVATE = $0006;  
   一个窗口被激活或失去激活状态;  
   WM_SETFOCUS = $0007;  
   获得焦点后  
   WM_KILLFOCUS = $0008;  
   失去焦点  
   WM_ENABLE = $000A;  
   改变enable状态  
   WM_SETREDRAW = $000B;  
   设置窗口是否能重画  
   WM_SETTEXT = $000C;