- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Winform不规则窗体实现心得
Winform不规则窗体的实现心得.txt男人的承诺就像80岁老太太的牙齿,很少有真的。你嗜烟成性的时候,只有三种人会高兴,医生 你的仇人和卖香烟的。 Winform不规则窗体的实现心得 Winform窗体通常都是矩形的,而本人在需要将一幅图片作为窗体背景,并且窗体边框呈现为图片外轮廓的不规则边缘时,却发现Framework并没有提供直接的实现。经过一通百度、Google和查阅 MSDN 后,发现实现的途径主要有以下几种:
1.覆盖 Form 本身的绘制,自己用代码重绘。
2.设置窗体的 TransparencyKey 为窗体设置背景图片边缘要成为不规则边框的部分的颜色。
3.根据图片或者其它的方式创建不规则的 GraphicPath 生成 Region,指定给窗体的 Region 属性。
这三种方法各有优劣:
第1种最麻烦,因为要靠代码一点点抠,要达到良好效果不容易,也不易于以后的修改。
第2种最简单,但有制约条件:a、图片的边缘部以外必须是TransparencyKey指定的颜色,并且图片的其它部分不能有这种颜色,否则会被不加区分的变为透明,而导致窗体出现镂空。b、系统必须运行在 24 位色下。因此,这种方法并不实用。
第3种的复杂程度介于1、2之间,并且控制也比较灵活。故本人选择了这种实现方式。
对于第3种方法,网上大多数的文章都只是介绍了实现的原理和一些简单的 Demo 代码。直接照做可能会遇到以下的一些问题而影响显示效果:
窗体的边缘和作为背景的图片外轮廓不重叠,出现错位。
界面上的控件布局时不容易定位于背景图片的相对位置。
解决这两个问题很简单,是要注意一些操作的细节。先看实现代码:
不规则窗体的实现
1 //从指定的位图中获取透明度大于 10 的区域;
2 Bitmap img = (Bitmap)pictbox.Image;
3 GraphicsPath grapth = BitmapUtil.GetNoneTransparentRegion(img, 10);
4 this.Region = new Region(grapth);
5
6 //要显示的图片设置为窗体背景;
7 this.BackgroundImage = pictbox.Image;
8 this.BackgroundImageLayout = ImageLayout.Zoom;
9
10 //在修改窗体尺寸之前设置窗体为无边框样式;
11 this.FormBorderStyle = FormBorderStyle.None;
12 this.Width = pictbox.Image.Width;
13 this.Height = pictbox.Image.Height;
BitmapUtil.GetNoneTransparentRegion 方法的实现如下:
读取位图的非透明区域
1 /// summary
2 /// 返回指定图片中的非透明区域;
3 /// /summary
4 /// param name=img位图/param
5 /// param name=alphaalpha 小于等于该值的为透明/param
6 /// returns/returns
7 public static GraphicsPath GetNoneTransparentRegion(Bitmap img, byte alpha)
8 {
9 int height = img.Height;
10 int width = img.Width;
11
12 int xStart, xEnd;
13 GraphicsPath grpPath = new GraphicsPath();
14 for (int y = 0; y height; y++)
15 {
16 //逐行扫描;
17
您可能关注的文档
最近下载
- 孝德与感恩(孝文化讲坛).pptx VIP
- 地下消防水池开挖专项施工方案.docx VIP
- 人工智能在小学数学个性化作业设计中的应用研究教学研究课题报告.docx
- 五上英语每日一练小纸条(含答案11页).pdf VIP
- Unit 3 Yummy food(Wrap up)外研版(三起)(2024)英语三年级下册.pptx VIP
- 近五年黑龙江省中考数学真题及答案2023.docx VIP
- 2022病毒疣基层诊疗指南.pdf VIP
- 大学物理化学第四版课程课件:第6章化学平衡.pptx VIP
- 中国体癣和股癣诊疗指南(基层实践版2022).docx VIP
- 张昕-行政组织学-第八章行政组织变革.pptx VIP
文档评论(0)