.NET程序界面探讨之1:Skin++篇

工作一直很忙,很久没有写博客了,有个朋友看过我的代码生成工具,觉得界面不错,随整理了一下界面代码,并加入了皮肤功能,现公布以飨读者。
可能做过Winform界面的朋友都知道,能够实现换肤的控件有很多,但做的比较不错的有如ActiveSkin、SkinCrafter、Irisskin、Skin++等等,不过都是收费的界面控件,这些控件很多来自C++的时代,但由于是OCX控件的方式,所以也可以使用到C#的Winform界面换肤中。
本人做过ActiveSkin、Skin++的界面换肤功能,觉得两者很是相似。现将Skin++的使用实现介绍如下。

1、定义一个Skin++控件变量用来存放。注意,该控件对象只要在主窗体中定义即可,其他派生的界面都会具有相同的皮肤效果。

public SKINPPVBCOMLib.SkinPPVBComDllClass SkinOb;//用来设置皮肤的控件变量

2、定义一个函数,用于加载相关的皮肤。

            try
            {
                if (SkinOb == null)
                {
                    SkinOb = new SKINPPVBCOMLib.SkinPPVBComDllClass();
                }
                if (skin != "" && skin.IndexOf(".ssk") >= 0)
                {
                    #region 设置按钮控件的效果,默认没有特殊效果
                       //0 button 1 checkButton 2 RadioButton
                    SkinOb.SetButtonType2((int)this.cmbChooseDb.Control.Handle, 3);
                    //SkinOb.SetButtonType2((int)this.fstChk_All.Handle, 1);
                    //SkinOb.SetButtonType2((int)this.radStoreProc.Handle, 2);
                    #endregion

                    SkinOb.InitializeSkin(skin);
                }
                else
                {
                    Marshal.ReleaseComObject(SkinOb);
                    SkinOb = null;
                    SetSystemRenderMode(false);
                }

                this.Hide();
                this.Show();
            }
            catch
            {
                EnableUIMenu(false);
                MessageBox.Show("皮肤加载出错,请检查是否存在指定的皮肤文件!");
            }
在代码中添加this.Hide();和this.Show();是为了更新界面,否则会出现一些界面效果还停留在原有效果上,这样处理一下就比较好了。
3、其他注意事项:
有时候您的项目代码是强名称的,那么也需要所引用的东西是强名称的才行,Skin++的控件对象默认是没有强名称的,需要强名称的话,那么执行下面的代码进行包装一下即可:

//把Com类型的控件用强名称进行包装,DOS命令
tlbimp SkinPPC#COM.dll /primary /keyfile:SharpCode.snk /out:SKINPPVBCOMLib.dll
另外要注意的是,如果在各种SKin++的定义皮肤中切换,效果很平滑,也很好,但是如果切换到系统默认的皮肤,总觉得界面有一些效果残留,不太好,因此最好提示软件客户重启软件。
4、界面各种皮肤效果如下





默认没有皮肤的界面

演示程序:http://files.cnblogs.com/wuhuacong/SkinPlusDemo.rar 

感兴趣的可以下载来研究研究,已经包含了上图的各种皮肤文件。

本文转自博客园伍华聪的博客,原文链接:.NET程序界面探讨之1:Skin++篇,如需转载请自行联系原博主。

时间: 2024-09-28 10:34:32

.NET程序界面探讨之1:Skin++篇的相关文章

VC程序界面多模式显示

看过徐景周写过的一篇"程序界面多模式显示的实现",在一个应用程序中使程序拥有多种显示模式,但是这个界面是由SDI的MFC文档视图结构实现,但是使用的代码在MDI的多文档/视图中不能实现,通过MSDN我找到了一些实现 MDI 的多模式实现方法,不敢独享,与大家分享 . 利用SDI和MDI实现这种多模式的显示的应用程序,第一步首先要实现的是可以动态加载和销毁菜单.对于SDI的应用程序,实现是比较简单的,对于MDI的应用程序,实现则是有些麻烦,不过,这些都是可以做到的!呵,呵! 首先,要将S

10个有用的网页应用程序界面技术

阅读本文英文版 (英文编辑:SmashingMagazine:翻译.校对:Lucas-Li) 近年来,越来越多的桌面应用程序移植到互联网上面的.没有了平台限制和安装要求且作为一种服务模式的软件看起来很吸引人的.网络应用程序界面设计的核心是网页设计:但是,它的焦点主要集中在功能上面.为了和桌面程序竞争,网络应用程序必须提供简单 ,直观的以及响应快速的用户界面,这样才能减少用户完成事情 的时间和精力. 过去我们没有用应有的方法来关注网络应用程序,现在该是仔细地研究一些有用的技术和设计方案,以便使网络

如何快速开发树形列表和分页查询整合的WInform程序界面

我在做Winform界面的时候,一般都是统一化处理,界面顶部放置一些字段条件供查询,下面就是分页查询列表,展示相关的数据.但有时候碰到一些表字段内容分类比较多,有一些特别重要,如果放在一个树形列表来进行快速分类查询,用户体验应该更好.本篇随笔主要介绍如何快速实现树形列表和分页查询整合的WInform程序界面. 1.标准WInform列表界面 标准的查询条件+列表数据展示的WInform界面如下所示. 这个界面主要就是通过代码生成工具(Database2Sharp)进行初期的Winform界面生成

ASP程序界面的多语言支持

程序 ASP程序界面的多语言支持 可能有的web应用程序,需要多语言支持,例如,讨论组,既有中文界面,以适合国人使用的方便,又需要英文界面,以满足国际化的需要.我想,似乎没有必要为每一个语言都写一个版本,这不仅比较繁琐,而且以后程序升级就必须修改所有版本的程序.熟悉vc++程序的朋友一定知道通常windows应用程序的国际化手段都是通过rc文件来解决的.只要重新加入不同语言版本的rc文件编译一下就行了.asp程序不能编译也不需编译.我于是开始考虑使用数据库,将ASP程序中使用到的提示信息/甚至图

使用Control.Invoke处理多线程应用程序界面

程序|多线程 使用Control.Invoke处理多线程应用程序界面 使用单一线程,在进行大计算量或耗时的操作时,会使界面失去响应.Control.Invoke 提供了一个在工作线程中更新见面的简单办法.该函数会把作为参数的回调函数提交给应用程序的界面进程(一般是主线程)的队列中,等待处理.这样,对界面的操作便无须担心同步.互锁等问题. 以下例子摘自一个局域网资源搜索程序        可以看到,线程池中的工作线程通过调用TreeView的Invoke方法,并提供一个回调函数,来实现对TreeV

程序界面多模式显示的实现

如果你用过RealPlayer播放器的话,那就一定对它的多模式显示方式不会陌生吧!RealPlayer拥有正常和精简两种显示模式.我们有时也想在自己的程序界面上实现类似的功能,该怎样实现呢?下面拿我用VC6.0做的一个多模式显示程序示例来向大家展示,它是怎样实现类似功能的.如下图所示:(图一) 正常显示模式:(图二)简洁显示模式,无视图:(图三),精简显示模式,仅工具条. 图一 图二 图三 基本构成思想: 实现原理很简单,只要分别获取窗体大小.客户区大小.工具条大小.状态条大小.边框大小以及标题

Delphi中用网页打造程序界面

大家都知道,现在的网页想要多花哨就有多花哨,比起传统Windows应用程序界面单调的菜单加按钮,不知会醒目多少.而且网页素材十分丰富,制作起来也比较简单.如果你想做一个华丽无比,动感十足的程序界面,那Web界面就是你最佳的选择. 第一步:根据需要,用FrontPage或者Dreamweaver做一个界面,界面加上图片,还可加上漂亮的动态Flash.Web界面与程序事件联系在一起的地方就是"超链接",我们以一个简单的播放器程序为例. 比如:要做一个播放器,有"播放"按

软件开发-如何能将程序界面做的很好看?

问题描述 如何能将程序界面做的很好看? 就像360,QQ什么的一样的界面,用普通的GUI开发做出来的按钮都是丑丑的普通按钮,360,QQ他们是怎么做到的?可以把软件做得像HTML5做出来的网页一样的那种效果吗? 解决方案 参考http://blog.csdn.net/ljh081231/article/details/8668327http://code.ijinshan.com/source/source.html 解决方案二: 不知道你在做什么GUI程序,通常普通拖出来的控件都比较普通,但是

菜鸟急求,关于windows程序界面设计的。自己想了好长时间了,百度了很多资料也没看到点眉目

问题描述 菜鸟急求,关于windows程序界面设计的.自己想了好长时间了,百度了很多资料也没看到点眉目 是这样的,我想在一个主窗口里,放置几个按钮控件,分别用来更新同一块矩形区域,但是每一个按钮按下,区域显示的内容是不一样的,并且擦除之前的内容,功能就 像图片里的那些按钮,能够控制下边显示的内容, 我用了InvalidateRect(hwnd,&rect,TRUE)发现区域只是闪了一下,并没有擦除任何内容,尤其是之前区域里的按钮控件也没有删除掉.导致新按钮和旧按钮都显示着. 查资料的时候,看到了