- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WINFORM自定义皮肤制作
/coding1016/archive/2010/01/22/1653777.htmlWINFORM自定义皮肤制作(上) 最近要做个软件正在做技术准备,由于WINFORM生成的窗体很丑陋,一个好的软件除了功能性很重要外,UI的体验也是不容忽视的。习惯性的在网上搜素了下,换肤控件也有好几款,但是有些用起来不是很好用,好点的也要花很多银子哦,而且毕竟是别人写的,心里总不是个滋味,所以决定自己尝试着写写看,花了一个晚上终于做出来了个DEMO,貌似还不错,贴图如下(图片是直接是用的暴风影音的,寒自己一个。。)/cnblogs_com/coding1016/WindowsLiveWriter/WINFORM_15EB/image_4.png下面和大家分享下。首先分析下皮肤的制作原理,我的理解是把整个窗体(去边框后)划分为9个区域(如果有更复杂的界面,可以划分更多),有图有真相:然后准备皮肤素材,切图,我的切图如下:接着可以开工了:1.初始化图片资源变量 protected int formMinX = 0;//最小化按钮的X坐标 protected int formMaxX = 0;//最大化按钮的X坐标 protected int formCloseX = 0;//关闭按钮的X坐标 protected int formTitleMarginLeft = 0;//标题栏的左边界 protected int formTitleMarginRight = 0;//标题栏的右边界 Image imgTopLeft = (Image)Resources.topleft;//窗体顶部左上角图片 Image imgTopRight = (Image)Resources.topright;//窗体顶部右上角图片 Image imgTopMiddle = (Image)Resources.topstretch;//窗体顶部中间图片 Image imgBottomLeft = (Image)Resources.bottomLeft;//窗体底部左下角图片 Image imgBottonRight = (Image)Resources.bottomRight;//窗体底部右下角图片 Image imgBottonmMiddle = (Image)Resources.bottomstretch;//窗体底部中间图片 Image imgMiddleLeft = (Image)Resources.LeftDrag_Mid;//窗体中部左边框图片 Image imgMiddleRight = (Image)Resources.RightDrag_Mid;//窗体中部右边框图片 Image imgFormMin = (Image)Resources.skin_btn_min;//最小化按钮 Image imgFormMax = (Image)Resources.skin_btn_max;//最大化按钮 Image imgFormClose = (Image)Resources.skin_btn_close;//关闭按钮 Image imgFormRestore = (Image)Resources.skin_btn_restore;//还原按钮2.重写OnPaint事件。代码直接贴上来(比较简单,就是计算图片要绘制到窗体的坐标,然后把图片绘到窗体上) protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); this.BackColor = Color.Black; //绘制皮肤 Graphics g = e.Graphics; //绘制窗体顶部左上角图片 g.DrawImage(imgTopLeft, 0, 0, imgTopLeft.Width, imgTopLeft.Height); int topRightX = e.ClipRectangle.Width - imgTopRight.Width; //绘制窗体顶部右上角图片 g.DrawImage(imgTopRight, topRightX, 0, imgTopRight.Width, imgTopRight.Height); int topMiddleWidth= e.ClipRectangle.Width - (imgTopLeft.Width + imgTopRight.Width) + 4; //绘制窗体顶部中间图片(标题栏) formTitleMarginLeft = imgTopLeft.Width; formTitleMarginRight = topRightX; g.DrawImage(imgTopMidd
文档评论(0)