求指导,关于窗体中控件具有窗体标题栏同样功能的做法(最大、最小、移动窗体),该如何解决
求指导,关于窗体中控件具有窗体标题栏同样功能的做法(最大、最小、移动窗体)如题 ,在窗体里面放一个Panel,然
求指导,关于窗体中控件具有窗体标题栏同样功能的做法(最大、最小、移动窗体)
如题 ,在窗体里面放一个Panel,然后我想在双击Panel 区域的时候可以放大缩小窗体,也可以移动窗体,就是panel区域的功能和窗体的标题栏功能一样,我是这样写的:
C# code protected override void WndProc(ref Message m) { base.WndProc(ref m); switch (m.Msg) { case Win32Methods.WM_NCHITTEST: if ((int)m.Result == Win32Methods.HTCLIENT) { Point pt = new Point((int)m.LParam); pt = PointToClient(pt); Control control = GetChildAtPoint(pt); if (control is Panel) { m.Result = (IntPtr)Win32Methods.HTCAPTION; } } break; } }
我重写了窗体的上面这个方法,但是当鼠标移到Panel区域的时候,根本木有激发这个事件,所以我就不知道怎么弄了 求高手指导?不要说用Panel的MouseDown MouseMove MouseDoubleClick MouseUp事件计算位移的方法哦 这个我知道的,求另外简单方法!
[解决办法]我猜你是想自绘窗体边框外形吧?
自绘窗体边框有两种方法,你采用的显然是将窗体设为无边框,然后再用控件仿造一个窗口边框出来包括标题栏。
我猜是不是因为WM_NC系列消息是出自窗口非客户区的,就是边框和标题栏。你把窗口边框设为none后,非客户区没了,所以这些消息当然就收不到了?
重绘窗体边框一般不用上面方法,因为上面方法不仅要进行绘制,还要模仿事件。后者很难做到和原生态窗口边框完全一致。
一般采用的方法是,不将窗口边框类型设为none,而是在WM_NCPAINT等消息中去重绘窗体的标题栏、边框等。这种方法绘制起来比较麻烦,但好处是完全兼容原生窗体功能。目前应用程序基本采用这种方法,比如QQ。
不过这种方法有个小小bug:就是在绘制标题栏时,系统会先绘上基本样式再执行你的自绘代码。基本样式就是一个纯蓝色的标题栏。你在最大化、最小化窗体时,你会发现标题栏这个原始蓝色的闪烁。不信你现在就拿你的QQ试一下。
[解决办法] WndProc(ref Message m)
鼠标移到panel上这个父类的重载貌似做不到