DSkinLite
来源:互联网 发布:linux shell 写入文件 编辑:程序博客网 时间:2024/05/19 18:00
这几日看DSkinLite美化界面,看那全英文的DSkinLite_help 技术文档,看到我想吐.
最终还是弄明白了一点点.写出来权当作笔记.
DSkinLite是一个非常强大的库,用来开发应用程序界面.它是一个精简的gui库,用xml文件描术window的皮肤.它支持大多数window的控件,同时也具有一些自己的特色.
主要的特色:
1. DSkinLite是一个精简的库,因为它不是用hook的方法,只是像mfc里的SubclassWindow一样替换程序.所以对应用程序的影响是很小的.
2. DSkinLite用xml文件定义gdi资源,描术如何draw一个window.这样就把UI(user interface用户接口<界面>)和程序逻辑分离开,用户可以很方便地改变程序皮肤.
3. DSkinLite有自己的图形优化库来处理图片.不需要第三方组件.
4. 画图的元素被抽像成线条,文本,矩形和图片.在xml文件中用这些原素来配置window的界面.
5. DSkinLite基于Win32 API,所以它不依赖于其它架构.
6. 支持色彩渐变.
7. 支持在运行时(runtime)改变皮肤.可以在运行时用不同样式的皮肤控制.
8. 支持Unicode
9. 完全支持透明控件,它支持绝大多数的控件透明化,包括子对话框(child dialog)
10. 完全支持弹出菜单,包括非矩形菜单.
11. 支持window的滚动条控件
12. 支持animation(动画).可以用多图片(muti-images)或者单张gif图片来制做animation
13. 支持list control,tree control ,list box
系统要求:
Microsoft windows 2000,me,xp,vista,7
/*****************************************************************************/ dsLoadSkin 函数加载window的皮肤. BOOL dsLoadSkin( LPCTSTR strSkinPath, int nLoadType ); 参数: strSkinPath [in] 指向一个以’/0’结束的字符串,指明皮肤的路径. nLoadType [in] 指明加载类形,这个参数可以是以下值: LOAD_FROM_FOLDER LOAD_FROM_DB 从皮肤数据库加载文件 返回值: 成功返回非零.失败返回零. dsLoadSkin 函数初始化一个皮肤主题. 需求: Header: dskinlite.h. /*******************************************************/ dsExitSkin函数清除资源. BOOL dsExitSkin(); 参数:无 反回值: 成功返回非零,否则返回零. dsLoadSkin和dsExitSkin需要成对调用. 需求: Header: dskinlite.h. /*******************************************************************/ dsSkinWindow 函数设置window的皮肤 BOOL dsSkinWindow( HWND hWnd, UINT uCtrlType, LPCTSTR szXmlLabel = NULL, BOOL bChildSkin = TRUE ); 参数: hWnd [in]窗口句柄 uCtrlType [in] 窗口类形,在enumWindowType中定义 szXmlLabel [in] 指定window的标签名,标签名在配置文件xml中定义.如果该参数设为NULL,将使用默认标签名的皮肤来设置window皮肤. [in] 指定是否设置子窗口皮肤. 返回值: 成功返回非零,否则返回零. /***********************************************************************/ 使用DSkinLite前当然要先把库下载下来. 以mfc对话框为例. 先建立一个dialog,命名为test并在上面画上需要的控件.确保可以运行. 则 源文件目录为 test/test/ .exe输出目录为 Test/Debug/ 一. Copy文件: 然后把dskinliteu.lib(DSkinLite安装目录下lib文件夹中, dskinliteu为unicode版, dskinlite为多字节版), DSkinLite.h, DSkinDef.h这三个文件,copy到dialog源代码目录下(test/test). 在VS2008中设置附加依赖项,方法如下: 选择项目->属性(支接ALT+F7也可以)->配置属性->链接器->输入 在附加依赖项中增加dskinliteu.lib 然后把 Microsoft.VC80.DebugCRT.manifest Microsoft.VC80.DebugMFC.manifest dskinliteud.dll msvcp80d.dll msvcr80d.dll (在DSkinLite安装目录下的bin文件夹中) Copy到test/Debug/中. 把编辑好的xml文件和包含皮肤图片的文件夹放到skin文件夹中,再把skin文件夹copy到test/Debug/中. 二. 在stdafx.h文件中加入如下语句: #define DSKINDLL_API extern "C" __declspec(dllimport) #include "DSkinDef.h" #include "DSkinLite.h" 三. 在CtestApp类的InitInstance()方法中加入 dsLoadSkin(_T("skin"),LOAD_FROM_FOLDER ); 就像这样 BOOL CtestApp::InitInstance() { ………… SetRegistryKey(_T("应用程序向导生成的本地应用程序")); dsLoadSkin(_T("skin"),LOAD_FROM_FOLDER ); Ctest1Dlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); ……… } 然后 int CtestApp::ExitInstance() { // TODO: 在此添加专用代码和/或调用基类 dsExitSkin(); return CWinApp::ExitInstance(); } 四: BOOL Ctest1Dlg::OnInitDialog() { ………… dsSkinWindow( GetSafeHwnd(), SKIN_TYPE_DIALOG, NULL, TRUE); return TRUE; // 除非将焦点设置到控件,否则返回TRUE } 类似的就oK了,现在用SPY++看一下,OK看不到其它控件了…
从文件夹加载皮肤文件.
bChildSkin
DSkinLite的xml文件的编辑 指定xml加载顺序: 有时,如果使用了继承特性,xml文件可能要有顺序的依赖.所以需要指定加载顺序.在skin文件夹放置config.ini文件用来指明加载顺序. 例子: [xmlindex] Count=2 1 = “Skin.xml” 2= “inheritDemo.xml” /*************************************/ <!—这是注释--> <!—用UTF-8,区分大小写--> <?xml version="1.0" encoding="UTF-8"?> <theme version="1.0"><!—theme是根tag(标记) --> <manifest name="default" folder="GeneralControl" author="xladykiller" /> <!—folder指定皮肤图片的路径,其它是的对theme的描述信息 --> <dsfont > <!—定义字体,id是标识符 --> <font id="default" fontface="tahoma" fontsize="11" bold="true"/> </dsfont> <dscursor> <!—定义鼠标,id是标识符 --> <cursor id="handcur" value="hand.cur"/> </dscursor> <dscolor><!—定义颜色,id是标识符 --> <color id="system_bg" value="RGB(201,226,248)" canadjust="false"/> </dscolor> <dsimage><!—定义图片 --> <image id="stardard.button.nor" value="Button.bmp" transparentcolor="RGB(255,0,255)" /> </dsimage> <dswindow> <window name="staticicon" type="static"> <!— 定义皮肤标记(window skin label),其中text 的font值是前面的定义的font的标识符id的值加有一个#,--> <property bkcolor="RGB(255,0,244)" btransparentbk="true" /> <text state="all" font="#default" horzalign="left" vertalign="top" textcolor="RGB(255,0,0)"/> </window> </dswindow> </theme> 需要注意的是: 如调用了如下函数
dsSkinWindow( GetSafeHwnd(), SKIN_TYPE_DIALOG, NULL, TRUE);
其中第二个参数和第三个参数分别为SKIN_TYPE_DIALOG,NULL那么,默认是应用
<window name="dialog" ......
同时,必需还要有一个sysmenu来描述最小化,最大化,闭关三个按钮.
如果在xml没有相应的描述,,而在dsSkinWindow中调用了,,那么程序将无法运行.
- DSkinLite
- DSkinLite学习
- 使用DSkinLite美化界面
- dskinlite(uieasy)使用交流
- dskinlite(uieasy)使用交流
- dskinlite自适应dpi
- DSkinLite皮肤库学习笔记
- 用DSkinLite实现QQ界面
- DSkinlite 使用技巧(二):MessageBox
- (转载)DSkinLite Demo系列(一):下载类软件
- dskinlite(uieasy mfc界面库)使用记录4:listbox测试
- (转载)DSkinLite 使用技巧(一):使用Radio Button做Tab 控件
- 插件式软件结构设计(二):构建基于DSkinLite的界面解决方案
- DSkinLite界面库 Demo系列(二):游戏大厅类软件
- 窗口控件透明效果的实现--DSkinLite界面库使用技巧
- 如何选择VC界面库产品?(二)– DSkinLite界面库介绍
- 如何选择VC界面库产品?(四)— DSkinLite vs DirectUI
- DSkinLite 使用技巧(六) – 绘制元素( image,text,rect,line)(上)
- POJ 1169
- POJ 1828
- Java文本语音转换组件JTTS发布(eSpeak封装)
- 自动纹理管理
- 电脑常见问题及解决方案
- DSkinLite
- libevent源码深度剖析十三——libevent信号处理注意点
- 谭浩强 《C程序设计》 第三版 第三章习题答案 (修正)
- ThinkPHP:简单的权限认证类gMAR[新增完整例子-订单管理后台]
- 继续优化,使用AC算法,时间控制在1秒内
- POJ 1298
- ibm aix rpc.cmsd remote exploit
- asp.net viewstat Tampering Vulnerabilities
- 如何搭建三层架构?(1)