C#的窗口美化二维码怎么做是怎么做的

查看: 7409|回复: 4
c#winfrom 简单窗体美化 IrisSkin2.dll窗体美化
TA的每日心情擦汗 08:37签到天数: 3 天[LV.2]偶尔看看I
好久没来了。
(1.43 MB, 下载次数: 730)
17:22 上传
点击文件名下载附件
解压 后有 IrisSkin2.dll 和一个Skins皮肤文件夹
使用说明 添加组件&&IrisSkin2.dll
工具箱处右键
QQ截图38.png (19.39 KB, 下载次数: 51)
17:28 上传
2.png (33.27 KB, 下载次数: 47)
17:28 上传
确定之后工具箱会出现一个&&“skinEngine1” 控件
拖到窗体 把解压的Skin文件夹复制到Debug 目录下
可以直接设置&&skinEngine1.skinFlie属性为指定 Ssk文件 也可以...
下面有源码共研究,很简单...
先来个预览
1.png (8.96 KB, 下载次数: 46)
17:36 上传
2.png (14.87 KB, 下载次数: 43)
17:36 上传
3.png (12.9 KB, 下载次数: 49)
17:36 上传
逻辑判断 基本没有& &乖孩子才能用 !!! 不放源码了直接下载吧
(1.48 MB, 下载次数: 799)
17:39 上传
点击文件名下载附件
本帖被以下淘专辑推荐:
& |主题: 15, 订阅: 0
TA的每日心情开心昨天&08:20签到天数: 538 天[LV.9]以坛为家II
呵呵,这个控件,比较老了,不过确实用着还不错,可以满足一部分小需求的用户了,不过这个在不同操作每户,不同风格主题里面的显示都是大不一样的。需要注意一下,我记得上学那儿用过。还写过一个宿舍管理系统用这东西
TA的每日心情郁闷 10:39签到天数: 1 天[LV.1]初来乍到
该用户从未签到
很不错,很给力,学习了
该用户从未签到
好东西!下载收藏!一定在项目中使用!C#的WinForm窗体美化 - 微光-倾城 - 博客园
Blog Stats
Posts - 31
Stories - 0
Comments - 0
Trackbacks - 0
为了帮助用户追求美观,.NET 4.0 专门为对此有需求的人提供了IrisSkin4.dll皮肤引用集,里面封装了许多对窗体重新描绘的方法,再搭配上WinForm特有的 .ssk 文件,就可以实现窗体的主题式美化,下面介绍如何使用这个皮肤引用集(用例项目名称为:Test 开发环境:Visual Studio 2012):
将IrisSkin4.dll下载至电脑中,并建议将该文件存放至项目的Debug中。(方便引用)&
进入项目,右键点击Test窗体类的引用-&点击”浏览“-&找到项目的Debug文件夹-&双击IrisSkin4.dll文件-&点击确定后,在引用集里就会出现“IrisSkin4”&
打开工具箱(看不到的请点击菜单栏中的视图-&工具箱即可),然后在工具箱的空白处右键-&添加选项卡,名称怎么好记怎么起,新建好应该会有“此组中没有可用控件”,然后将我们Debug中的IrisSkin4.dll文件,直接拖动到这些字上,也就是往这个选项卡里加控件。成功后如下图:&
然后拖动SkinEngine控件到窗体上,成功后如下图:&
自此美化窗体的环境全部搭建完成。
有了环境之后,窗体的美化工作就和我们平时接触到的换肤操作有些相似(就是选择一个皮肤,然后点击更换),但在C#窗体开发中,这种“换肤操作”不是很容易的。首先要明白一个点就是,窗体的皮肤文件都是以 “.ssk”为后缀名的,所以,我们要先去制作窗体的皮肤文件,才能实现“换肤”。(但是这就需要美工基础了,所以博主在这里提供了一些现成的美观的ssk文件提供阅读者下载,皮肤不是我做的,我整理的,尊重原作者。)
下面,我就给阅读者简单的分享一下流程吧:
首先将现成的.ssk文件放在项目的Debug中,这也是方便引用。(用例为DeepCyan.ssk)&
然后在Form1.cs的InitializeComponent();下添加如下代码:
this.skinEngine1 = new Sunisoft.IrisSkin.SkinEngine(((System.ComponentModel.Component)(this)));
this.skinEngine1.SkinFile = Application.StartupPath + "//皮肤文件名";
用例中如图:&3. 然后保存代码,我们试试看效果怎么样!&4. 自此美化界面基本完成,是不是很容易。无须美工基础,简单的审美即可。
这种简单的窗体美化有助于开发的系统整体保持一个风格,增强用户的体验性和视觉感受。
使用IrisSkin4.dll换肤的效果是有限的,有时它的渲染效果反而令我们抓狂(比如我用了一个SportsBlue皮肤,然后发现虽然这个皮肤的样式我很喜欢,但在它的渲染下窗体的button实在是很low),这时我们想要自定义自己不满意的控件而不需要皮肤对这些控件进行渲染,只需加上如下一行代码:
skinEngine1.DisableTag = <span style="color: #99;
//设置不需要被渲染的控件Tag值为9999
然后把不需要被渲染的控件Tag值属性设置为9999,即可显示该控件的自定义样式Hi~ o(* ̄▽ ̄*)ブ
C# Winform 窗体美化(四、镂空窗体)
四、镂空窗体
直接贴效果图吧:
1、控件的透明
2、窗体的透明
代码如下:
public partial class Form1 : Form
public Form1()
InitializeComponent();
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, 0x00FF00, 255, LWA_COLORKEY);
private const uint WS_EX_LAYERED = 0x80000;
private const int GWL_EXSTYLE = -20;
private const int LWA_COLORKEY = 1;
[DllImport("user32", EntryPoint = "SetWindowLong")]
private static extern uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong);
[DllImport("user32", EntryPoint = "SetLayeredWindowAttributes")]
private static extern int SetLayeredWindowAttributes(IntPtr hwnd, int crKey, int bAlpha, int dwFlags);
private void Form1_Load(object sender, EventArgs e)
TransparencyKey = BackC
这句代码可以使窗口透明。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!&&&& VS足够强大,强大到只需动动鼠标就可以写出个基本的界面出来,但是其自带的控件都是千篇一律的样式,对于追求完美的我而言,实在是忍不下去了,只好自己亲自动手对其进行改造----继承已有的控件,再对其相关的消息或事件进行处理。窗体Form作为界面的主体部分,必先对其进行美化,在窗体自绘的过程中,需要使用到GDI+,如若对GDI+不是很了解的同学可移步我的或者搜索下相关的介绍。
这篇文章将要介绍到的内容:
实现效果演示:
一:窗体圆角的处理
&&& 对于无边框窗体圆角矩形的处理,我这里采用的是使用API函数,相比于自己用GDI+写的处理圆角的函数,效果要稍微好点,至少线条在圆角处过渡的比较平滑,为了便于复用,我把其封装到窗体自绘辅助类RenderHlper的SetFormRoundRectRgn函数中:
/// &summary&
/// 设置窗体的圆角矩形
/// &/summary&
/// &param name="form"&需要设置的窗体&/param&
/// &param name="rgnRadius"&圆角矩形的半径&/param&
public static void SetFormRoundRectRgn(Form form, int rgnRadius)
int hRgn = 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 命名空间:
[DllImport("gdi32.dll")]
public static extern int CreateRoundRectRgn(int x1, int y1, int x2, int y2, int x3, int y3);
[DllImport("user32.dll")]
public static extern int SetWindowRgn(IntPtr hwnd, int hRgn, Boolean bRedraw);
[DllImport("gdi32.dll", EntryPoint = "DeleteObject", CharSet = CharSet.Ansi)]
public static extern int DeleteObject(int hObject);
重写窗体的OnSizeChanged事件,并在此事件中调用SetFormRoundRectRgn,此处的Radius参数为定义的窗体圆角半径属性:
protected override void OnSizeChanged(EventArgs e)
base.OnSizeChanged(e);
RenderHelper.SetFormRoundRectRgn(this, Radius);
二:无边框窗体大小的改变与移动
&&&&& 当把窗体的FormBorderStyle属性调整为FormBorderStyle.None时,此时,窗体的大小改变不了,同时窗体不能移动。要想实现无边框窗体大小的改变与移动,可采用如下方法:
(1)重写窗体的过程WndProc:
&主要是对WM_NCHITTEST消息进行处理,根据事件的发生位置来进行不同方向箭头的调整,窗体大小改变与移动的函数:
//调整窗体大小
private void WmNcHitTest(ref Message m)
int wparam = m.LParam.ToInt32();
Point mouseLocation = new Point(RenderHelper.LOWORD(wparam),RenderHelper.HIWORD(wparam));
mouseLocation = PointToClient(mouseLocation);
if (WindowState != FormWindowState.Maximized )
if (CanResize == true)
if (mouseLocation.X & 5 && mouseLocation.Y & 5)
m.Result = new IntPtr(Win32.HTTOPLEFT);
if (mouseLocation.X & Width - 5 && mouseLocation.Y & 5)
m.Result = new IntPtr(Win32.HTTOPRIGHT);
if (mouseLocation.X & 5 && mouseLocation.Y & Height - 5)
m.Result = new IntPtr(Win32.HTBOTTOMLEFT);
if (mouseLocation.X & Width - 5 && mouseLocation.Y & Height - 5)
m.Result = new IntPtr(Win32.HTBOTTOMRIGHT);
if (mouseLocation.Y & 3)
m.Result = new IntPtr(Win32.HTTOP);
if (mouseLocation.Y & Height - 3)
m.Result = new IntPtr(Win32.HTBOTTOM);
if (mouseLocation.X & 3)
m.Result = new IntPtr(Win32.HTLEFT);
if (mouseLocation.X & Width - 3)
m.Result = new IntPtr(Win32.HTRIGHT);
m.Result = new IntPtr(Win32.HTCAPTION);
&重写窗体过程:
protected override void WndProc(ref Message m)
switch (m.Msg)
case Win32.WM_NCHITTEST:
WmNcHitTest(ref m);
base.WndProc(ref m);
&(2)对于仅仅只想实现窗体的移动而不改变窗体的大小,可以重写OnMouseDown事件中发送HTCAPTION消息来实现无边框窗体的移动,具体的实现代码如下:
/// &summary&
/// 移动窗体
/// &/summary&
public static void MoveWindow(Form form)
Win32.ReleaseCapture();
Win32.SendMessage(form.Handle, Win32.WM_NCLBUTTONDOWN, Win32.HTCAPTION, 0);
调用窗体移动函数:
protected override void OnMouseDown(MouseEventArgs e)
base.OnMouseDown(e);
if (e.Button == MouseButtons.Left)
Render.MoveWindow(this);
三:窗体边框的绘制与边框阴影的实现
&边框的绘制:边框的绘制使用用PS制作好的图片来进行贴图操作,在贴图的过程中使用九宫图贴图方法,保证此边框图片能满足任何大小的窗体。
&窗体边框的实现:此部分主要涉及到对的了解,只要在窗口的ClassStyle添加此样式即可,关键代码如下:
protected override CreateParams CreateParams
CreateParams cp = base.CreateP
if (!DesignMode)
cp.ClassStyle |= (int)
ClassStyle.CS_DropSHADOW;
四:系统按钮的绘制与事件处理
&此部分是所有部分中最难的部分,在此部分中既要实现系统按钮不同状态下(鼠标操作改变按钮状态)的绘制,还有对其相应的事件进行处理,所以我创建了2个类:SystemButton类和SystemButtonManager类。SystemButton类表示系统按钮类,而SystemButtonManager的功能是对系统按钮各个状态与事件的管理。类SystemButtonManager的类图如下所示:
&属性、方法、事件的功能介绍如下表:
&&&& 对于类SystemButtonManager,主要是管理三个系统按钮的状态与事件,其他特别要介绍的是定义的系统按钮状态索引器,根据提供的索引来获取或者设置按钮的当前状态。
五:窗体标题栏的绘制
&&&&&标题栏的绘制主要涉及到窗体Icon图标的绘制与窗体标题的绘制,绘制的过程中定义了2个属性:IconRect,TextRect,分别对应着图标的坐标矩形与窗体标题的坐标矩形,图标与标题的绘制在这个矩形中绘制,需要提醒的时,图标的绘制需要注意到是否窗体的ShowIcon属性。
六:解决窗体闪烁的问题
&&&& 在窗体的自绘过程中,当调整窗体的大小等操作而触发窗体重绘,此时窗体的闪烁现象更为明显,相信大部分同学在自定义控件的过程中或多或多的出现这种问题,对于此问题,每个人又不同的解决方法,这里我提供四种解决方案类解决窗体的闪烁:
方法一:第一个容易想到的是采用双缓冲机制来进行图形的绘制,对双缓冲不了解的同学可以参考下我的另外一篇文章。
方法二:当将样式添加到窗体的ClassStyle样式中可以明显的解决窗体闪烁的现象。代码见本文的第三部分--窗体边框的绘制与边框阴影的实现。
方法三:当窗体进行重绘时,对消息进行忽略,应用代码如下:
protected override void WndProc(ref Message m)
switch (m.Msg)
case Win32.WM_ERASEBKGND:
m.Result = IntPtr.Z
base.WndProc(ref m);
方法四:将样式添加到窗体的ExStyle样式中,此方法对解决窗体挂有很多子控件时窗体闪烁的现象特别明显,应用代码如下:
protected override CreateParams CreateParams
CreateParams cp = base.CreateP
if (!DesignMode)
cp.ExStyle |= (int)WindowStyle.WS_CLIPCHILDREN;
注:本博客所有文章均为作者个人原创&,如若转载,请标记文章出处:&& 苦笑。
阅读(...) 评论()温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
&&可以看下别人的成品效果:
阅读(17726)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'c# winform 界面美化 DotNetBar',
blogAbstract:'用到第三方控件:DotNetBar首先先去下载个:DevComponents.DotNetBar2.dll&&&& 百度一下出来大把(这里没找到上传附件的地方,找不到的可以找我要q)然后在vs中工具栏中 右键 选择项 将dll 弄到工具栏中去 用法很简单:在cs类中的from改成这样:\n\nnamespace testjm\n\n{\n\n&&& ',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:1,
publishTime:1,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:1,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}}

我要回帖

更多关于 卫星图做底图美化 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信