支持换肤功能的窗口实例

这个例子展示了如何绘制定制(自绘)窗口框架(包括标题、边框等)。

一、前言

如今,支持定制皮肤功能的软件越来越流行。这样用户就可以自己修改程序的外观。甚至Windows操作系统本身做到这点了。Windows XP提供的主题(theme)技术可以修改窗口、按钮、滚动条等的外观。

最近,我想用MFC设计一个可以换肤的程序。在网上我没有搜索到任何想要的东西,所以我决定自己写一个。这不是一个很难的问题,但是需要对Windows操作系统的绘制窗口的机制比较熟悉。

二、背景

我提供了下面的一些类:

1. CSkinWin----CSkinWin类是一个绘制定制(自绘)窗口的类。它绘制窗口上、下、左、右边框和标题栏按钮如最大化、关闭按钮。为了作到这一点,CSkinWin类从一个ini文件读入配置信息,在ini文件配置窗口各边框的位图。需要指出的是,ini文件的格式是从Windows Blinds(Stardock的杰作)的UIS格式拷贝过来的,因为我希望在我的程序里支持Windows Blinds的主题。

2. CSkinButton---CSkinButton类是绘制定制(自绘)按钮的类。它用四个位图分别代表正常、有焦点、按下和无效状态。位图格式也是Windows Blinds格式,参数在同一个ini文件中定义。因为一个窗口会有多个按钮实例,所以我设计了CSkinButtonResource类来存放定制(自绘)按钮的皮肤。

3. CMyBimtap 等--- 一些相关类,其中有些是来自Codeproject. 尽管我已经不记得这些作者了,但我还是要感谢它们.

时间: 2024-08-21 07:21:58

支持换肤功能的窗口实例的相关文章

仿百度换肤功能的简单实例代码_javascript技巧

效果:(换肤出来一个div,选择你想要的图片,作为网页背景,保存) 要点:cookie保存状态 html代码: <body> <div id="header"> <div id="header_con"> <div class="dbg"><a href="javascript:;" onclick="showImgBox()">换肤</a&

Android编程实现换肤功能实例_Android

本文实例讲述了Android编程实现换肤功能的方法.分享给大家供大家参考,具体如下: 本系列专题培训适用范围:初级Android程序员,即有J2SE基础和Android初级水平.J2SE基础是指掌握JAVA语法,1.5.1.6新增的语法不完全掌握也没关系.了解基本的面向对象思想.能编写简单的J2SE程序,掌握基本的调试方法,熟悉Swing更好.Android初级是指掌握Activity.Service.BroadcastReceiver.Intent.SQLite.UI组件的使用,能参照例子编写

Bootstrap框架结合jQuery仿百度换肤功能实例解析_javascript技巧

换肤功能的应用很广,不管是搜索界面还是普通的管理界面等等,都可以进行设计并且应用换肤功能,起到更好的用户体验.  今天仿造百度的换肤功能,实现了基本的换肤功能,接下来将会为大家介绍如何实现.在设计界面的过程当中,我采用了Bootstrap框架,以便更好的适应屏幕.(当然也是为了更好的熟悉使用这个框架,大家别忘了把Bootstrap框架的css和js包引进来哦).在创建项目时最好可以分别将css.js.images分开.  首先是布局,我只是布局了一下换肤的简单界面,其中就是一些按钮和图片,为了简

仿酷狗音乐播放器开发日志二十——换肤功能背景图片控件的制作(附源码)

转载请说明原出处,谢谢~~           <仿酷狗音乐播放器开发日志二十>里做了换肤功能的一部分,今天完成其他的部分.酷狗的换肤窗口里的背景图可以让用户选择来换图,原酷狗的背景图的小图标,有normal.hover.down等多种状态,鼠标移动上去便会发生变化.如图        当鼠标经过时会有个黑色图片覆盖,边框变为浅蓝色.并且在他上面显示出作者的一些信息.要实现这个效果应该另外开发一个控件来支持动态的信息展示效果.我把这个小控件的开发过程和源码发一下,给学习做duilib控件的新手

实现系统滚动条换肤功能

对于Windows系统中各种控件换肤功能,要数滚动条的换肤最难实现了,尤其是控件自带的系统滚动条,如Edit.ListBox.ListView.TreeView等自带的系统滚动条,要想实现其自定义的皮肤功能,用常规办法似乎都无法实现. 对于常规的皮肤定制一般都是通过定制WM_PAINT.WM_ERASEBKGND.WM_CTLCOLORxxx.NM_CUSTOMDRAW来实现.然而系统滚动条的绘制,常规的.很阳光的方法行不通,微软把一条康庄大道堵死了.根据我的观察测试,系统滚动条有许多的消息都对

漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)_javascript技巧

漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha) 演示效果:http://ucren.com/ucren-examples/widgets.html 已知缺陷:1.widgets 不支持多态.2.图片预载功能对 Firefox 的支持不是很好. 未来考虑解决的问题:1.优化图片预载2.与框架 vjbox 整合到一起 未来考虑开发的新控件:1.滑块调节器(类似windows音量调节器)2.进度条3.outlook 菜单4.树 what's new2007-

漂亮的widgets,支持换肤和后期开发新皮肤_javascript技巧

作者:ucren演示效果:http://ucren.com/ucren-examples/widgets.html 已知缺陷: 1.换肤功能由于图片变动量比较大,所以加载有些慢. 2.widgets 不支持多态. 未来考虑解决的问题: 1.对图片进行预载处理 2.与框架 vjbox 整合到一起 未来考虑开发的新控件: 1.滑块调节器(类似windows音量调节器) 2.进度条 3.outlook 菜单 4.树 widgets.js 复制代码 代码如下: /*  * Ucren example.

android换肤功能 如何动态获取控件中背景图片的资源id?_Android

这个是在在做一个换肤功能时遇到的问题.   对于换肤,网上都有示例,可以从别的皮肤安装包中读取所要的资源,前提是你必须先持有这个资源的引用名称,像R.drawable.background(喂,这不是废话嘛).这个换肤的方案原理就是,自身应用的资源名称是R.drawable.background,那皮肤包中应该也是这个名称,然后通过这个名称获取该资源在皮肤包中的具体id,代码: //先获取本地资源引用名称,type name是R.drawable.background中的"drawable&qu

Flex AIR应用换肤功能(Android和IOS)

说明 换肤功能,即将整个应用的皮肤都进行更换,其实质,是动态加载swf文件的过程,而这些swf文件则有css文件编译而来. 关于换肤功能,在android和ios系统的实现方式是不同的.主要原因,是因为ios不支持本地加载(ipa中包含)多个swf文件.   换肤基础 1) 原理 :就是将各种不同的css文件先编译成swf,然后用StyleManager类的loadStyleDeclarations方法加载换肤的swf. 2) 基础: 定义css文件,如下: /* CSS file */ @na