C#中窗体Form的美化窗体圆角的处理

C#中窗体Form的美化窗体圆角的处理

ID:38580061

大小:311.50 KB

页数:9页

时间:2019-06-15

C#中窗体Form的美化窗体圆角的处理_第1页
C#中窗体Form的美化窗体圆角的处理_第2页
C#中窗体Form的美化窗体圆角的处理_第3页
C#中窗体Form的美化窗体圆角的处理_第4页
C#中窗体Form的美化窗体圆角的处理_第5页
资源描述:

《C#中窗体Form的美化窗体圆角的处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C#中窗体Form的美化VS足够强大,强大到只需动动鼠标就可以写出个基本的界面出来,但是其自带的控件都是千篇一律的样式,对于追求完美的我而言,实在是忍不下去了,只好自己亲自动手对其进行改造----继承已有的控件,再对其相关的消息或事件进行处理。窗体Form作为界面的主体部分,必先对其进行美化,在窗体自绘的过程中,需要使用到GDI+,如若对GDI+不是很了解的同学可移步我的CSDN博客或者搜索下相关的介绍。这篇文章将要介绍到的内容:·窗体圆角的处理·无边框窗体大小的改变与移动·窗体边框的绘制与边框阴影的实现·系统按钮的绘制与事件处理·窗体标题栏的绘制·解决窗体闪烁的问题实现效果演示

2、:代码下载一:窗体圆角的处理对于无边框窗体圆角矩形的处理,我这里采用的是使用API函数CreateRoundRectRgn,相比于自己用GDI+写的处理圆角的函数,效果要稍微好点,至少线条在圆角处过渡的比较平滑,为了便于复用,我把其封装到窗体自绘辅助类RenderHlper的SetFormRoundRectRgn函数中:ViewCode///

///设置窗体的圆角矩形//////需要设置的窗体///圆角矩形的半径publicstat

3、icvoidSetFormRoundRectRgn(Formform,intrgnRadius){inthRgn=0;hRgn=Win32.CreateRoundRectRgn(0,0,form.Width+1,form.Height+1,rgnRadius,rgnRadius);Win32.SetWindowRgn(form.Handle,hRgn,true);Win32.DeleteObject(hRgn);}此处需要把所需要的API函数引用到类Win32中,引用的时候注意添加System.Runtime.InteropServices命名空间:ViewCode[DllImp

4、ort("gdi32.dll")]publicstaticexternintCreateRoundRectRgn(intx1,inty1,intx2,inty2,intx3,inty3);[DllImport("user32.dll")]publicstaticexternintSetWindowRgn(IntPtrhwnd,inthRgn,BooleanbRedraw);[DllImport("gdi32.dll",EntryPoint="DeleteObject",CharSet=CharSet.Ansi)]publicstaticexternintDeleteObject(

5、inthObject);重写窗体的OnSizeChanged事件,并在此事件中调用SetFormRoundRectRgn,此处的Radius参数为定义的窗体圆角半径属性:ViewCodeprotectedoverridevoidOnSizeChanged(EventArgse){base.OnSizeChanged(e);RenderHelper.SetFormRoundRectRgn(this,Radius);}二:无边框窗体大小的改变与移动当把窗体的FormBorderStyle属性调整为FormBorderStyle.None时,此时,窗体的大小改变不了,同时窗体不能移动。

6、要想实现无边框窗体大小的改变与移动,可采用如下方法:(1)重写窗体的过程WndProc:主要是对WM_NCHITTEST消息进行处理,根据事件的发生位置来进行不同方向箭头的调整,窗体大小改变与移动的函数:ViewCode//调整窗体大小privatevoidWmNcHitTest(refMessagem){intwparam=m.LParam.ToInt32();PointmouseLocation=newPoint(RenderHelper.LOWORD(wparam),RenderHelper.HIWORD(wparam));mouseLocation=PointToClie

7、nt(mouseLocation);if(WindowState!=FormWindowState.Maximized){if(CanResize==true){if(mouseLocation.X<5&&mouseLocation.Y<5){m.Result=newIntPtr(Win32.HTTOPLEFT);return;}if(mouseLocation.X>Width-5&&mouseLocation.Y<5){m.Result=newIntPtr(Win32.HTTO

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。