下载地址:http://download.youkuaiyun.com/source/1492115
--------------------- 分割线 -----------------------------------------------------------------------------------------------------
--------------------- 注意
PS:有人知道如何修改优快云上,自己发布的资源说明吗?我找了半天没找到修改的入口,太郁闷了。
如果之前有朋友已经使用KWndLib的皮肤或者界面功能,在更新这次的开发包之后,需要重新编译。因为我调整了函数导出编号,不使用新的KWndLib.Lib库重新编译的话,会有C++调用错误的。
2008年利用业余时间做了KWndLib库后,到2009年7月今天,慢慢把功能都完善了下,并且修正了不少Bug,目前自我总结一下(主要介绍一下皮肤库的功能,界面库有兴趣可看下载地址中的Demo):
--------------------- 分割线 -----------------------------------------------------------------------------------------------------
--------------------- 皮肤库目前的功能特点:
1. 通过详细的配置文本来实现皮肤效果。
2. 简单的调用方式,仅需要在程序中,显示调用皮肤库加载函数一次即可启用皮肤。
3. 显示调用皮肤库函数启用皮肤库效果后,界面中各种元素(菜单项、标题栏按钮、Button控件)的状态皮肤库会自动管理。
4. 无缝切换皮肤托管状态,启用皮肤后,如果调用函数关闭皮肤效果,自动切换回Windows默认皮肤效果。
(XP皮肤效果à KWndLib皮肤方案Aà XP皮肤效果)
(XP皮肤效果à KWndLib皮肤方案Aà KWndLib皮肤方案B)
5. 一套皮肤方案中,可配置不同Window、Button、Menu的配置方案。
6. 可改变标题栏、菜单栏、窗体边框的尺寸。
7. 自绘3D Button控件,绘制方式有2种:通过配色方案绘制、通过贴图方案绘制。
8. 详细的配色方案:菜单栏、窗体边框、tooltips窗口、Button控件。
9. 详细的Bmp贴图方案:标题栏、标题栏按钮、Button控件。
10. 可添加自定义菜单项图标,五个状态(选中状态图标、选种状态鼠标悬停时图标、非选中状态图标、非选种状态鼠标悬停时图标、disable状态图标)。
11. 可自定义标题栏、菜单栏、tooltips窗口、Button控件中的字体。
12. Menubar有丰富的颜色配置方案,可配置成平面单色,也可配置成3D效果渐变色。
13. 完美托管ToolBar的tooltips窗口,tooltips窗口更美观简洁。
14. 在同一个配置方案中,不同的窗体可以分别拥有自己单独的皮肤方案,在程序运行中,不同的窗体可以有着不同的显示效果。
15. 支持多线程,在多线程UI中,在任意子线程中调用皮肤库初始化函数就能启动所有线程的皮肤效果。并且如果在程序继续新建UI线程,无需再次显示调用皮肤库初始化函数。(皮肤库会自动管理各个线程皮肤的托管)
16. 快速输出文字,封装了GDI中的文字绘制函数,在皮肤库绘制文字时,更加快速流畅。
其中第15点,因为把项目从VC7升级到VC8之后,APIHOOK时有时候会有问题,所以有时候会造成应用程序LoadLibrary失败,不过只要在Cfg中设置EnableMultiThread=0即可关闭APIHOOK的功能,即不支持多线程。
使用这个换肤功能也很简单,调用KEnableUserStyle(LPWSTR lpCfgFilePath)或KEnableUserStyleA(LPSTR lpCfgFilePath);就可以了,调用的时候没有限制,可以在程序初始化的时候,或者程序运行的时候,并且可以在需要的时候直接调用KDisableUserStyle()把皮肤换原到默认状态。
以下是使用换肤功能的代码,具体可下载我提供的KWndLib.dll资源包。有兴趣大家可以交流交流,QQ5192747。
--------------------- 分割线 -----------------------------------------------------------------------------------------------------
--------------------- 效果图:
多个皮肤在同一个方案的效果:
Button的OnFocus状态
Button的LBDown状态
在同一个AP中,切换皮肤,皮肤方案A
在同一个AP中,切换皮肤,皮肤方案B
皮肤方案C
打开文件操作时的效果
--------------------- 分割线 -----------------------------------------------------------------------------------------------------
--------------------- 调用方法
stdafx.h文件
- #include "KWndAPI.h"
- #pragma comment(lib, ".KWndLib.lib")
MfcDocView.cpp
- BEGIN_MESSAGE_MAP(CMfcDocView, CView)
- ON_COMMAND(ID_MENU_ENSKIN, OnEnableSkin)
- ON_COMMAND(ID_MENU_DISSKIN, OnDisableSkin)
- END_MESSAGE_MAP()
- void CMfcDocView::OnEnableSkin()
- {
- m_bEnableSkin = TRUE;
- KEnableUserStyleA();
- }
- void CMfcDocView::OnDisableSkin()
- {
- m_bEnableSkin = FALSE;
- KDisableUserStyle();
- }
--------------------- 分割线 -----------------------------------------------------------------------------------------------------
--------------------- 以下是配置文件说明(程序员都讨厌写文档,我也不例外。。。我会慢慢把说明补充完整的,欢迎大家自己研究完配置方案)
配置方案直接以文件的形式存储在配置文件夹内,包括一个配置Cfg,加上2个BMP配置文件夹,和一个补充皮肤方案文件夹(在这个文件夹内可以为一个配置方案配置多个皮肤效果,具体请参照下载资源包内的Demo)
当然,如果不提供配置方案文件夹,DLL会直接使用默认的图标与配置参数。
[Cfg]
SystemImageFolder=SysImageRes 系统Img资源文件夹名称
AutoSizeGrow=1 当EnableKSkin时,如果换肤后的窗口尺寸与原来的窗口尺寸相比,有变化了,是否需要自动调整
TakeOverUserMenu=1 是否启用菜单的皮肤效果(右键菜单和窗口主菜单)
MenuImgColWidth=20 菜单的图标栏宽度
TakeOverBkColor=0 是否替换默认的背景色
TakeOverButton=1 是否启用Button的皮肤效果
TakeOverTooltipsWnd=1 是否起用ToolTips的皮肤效果
TakeOverToolBarBkColor=0 是否替换ToolBar的背景色,这个支持的不是很好
TakeOverTabCtrl=0 ; not support
EnableMultiThread=1 是否起用支持多线程
///
// Default Wnd Res Define Start
[CaptionRes]
UseDefFont=1 是否使用Windows设定的默认字体
FontHeight=11 自定义字体的大小
FontFace=Times New Roman 自定义字体的Font
CharSet=ANSI_CHARSET 自定义字体的字符集
FontColor=255,255,255 自定义字体的字体颜色
IconSize_X=16 Windows标题栏左上角的ICON大小
IconSize_Y=16 Windows标题栏左上角的ICON大小
ButtonSpace=0 MinSizeBox,MaxSizeBox,CloseSizeBox之间的空隙
ButtonTop=6 MinSizeBox,MaxSizeBox,CloseSizeBox绘制时的top坐标
ButtonTTop=5 当Windows风格为ToolWindow时,绘制SysBox时的top坐标
SizeWndCaptionHeight=25 Caption的高度(包含Border尺寸) WS_SIZEBOX风格的窗体
NSizeWndCaptionHeight=25 Caption的高度(包含Border尺寸)
ToolWndCaptionHeight=18 Caption的高度(包含Border尺寸)WS_EX_TOOLWINDOW风格的窗体
[BorderRes]
SizeWnd_BorderWidth=4 Border的象素大小 WS_SIZEBOX风格的窗体
NormalWnd_BorderWidth=3 Border的象素大小
ToolWnd_BorderWidth=3 Border的象素大小 WS_EX_TOOLWINDOW
Wnd_BorderColor_Left&Top_0=15,38,104 Border的颜色,激活状态,从外到里
Wnd_BorderColor_Left&Top_1=23,47,111
Wnd_BorderColor_Left&Top_2=35,58,126
Wnd_BorderColor_Left&Top_3=26,50,117
Wnd_BorderColor_Right&Bottom_0=15,38,104
Wnd_BorderColor_Right&Bottom_1=23,47,111
Wnd_BorderColor_Right&Bottom_2=35,58,126
Wnd_BorderColor_Right&Bottom_3=26,50,117
Wnd_BorderColor_Left&Top_N0=104,116,166 Border的颜色,非激活状态,从外到里
Wnd_BorderColor_Left&Top_N1=109,121,172
Wnd_BorderColor_Left&Top_N2=102,114,162
Wnd_BorderColor_Left&Top_N3=97,108,158
Wnd_BorderColor_Right&Bottom_N0=104,116,166
Wnd_BorderColor_Right&Bottom_N1=109,121,172
Wnd_BorderColor_Right&Bottom_N2=102,114,162
Wnd_BorderColor_Right&Bottom_N3=97,108,158
[ClientRes]
WndBkColor=217,214,200 背景色
// Default Wnd Res Define End
///
[TooltipsWndRes]
UseDefFont=1 是否使用Windows设定的默认字体
FontHeight=11
FontFace=Times New Roman
CharSet=ANSI_CHARSET
FontColor=0,0,0
BorderColor=128,128,128 Tooltips的边框颜色
BkGndColorS=255,255,255 Tooltips窗体背景色(渐变色的起始颜色)
BkGndColorE=228,229,240 Tooltips窗体背景色(渐变色的结束颜色)
[ButtonRes]
UseDefFont=1
FontHeight=10
FontFace=Times New Roman
CharSet=DEFAULT_CHARSET
FontColor=0,0,0
///
// DrawMode: 0, Use GDI,Support by KWndLib Default Function
// 1, Use BitMap, Support by bitmap in ImgRes Folder
DrawMode=0
///
// DrawMode = 1
AutoSize=1
Bmp_Normal=Normal.bmp
Bmp_Focus=Focus.bmp
Bmp_Select=Select.bmp
Bmp_SelectFocus=SelectFocus.bmp
Bmp_Disable=Disable.bmp
Bmp_MouseDown=MouseDown.bmp
DrawText=1
///
// DrawMode = 0
ButtonEllipse=5
BtnTopBgColor=255,255,255
BtnTopColor=248,244,233
BtnBottomBgColor1=243,241,236
BtnBottomBgColor=255,255,255
BtnBottomColor=234,230,221
BtnFrameColor=130,127,122
BtnTopBgColor_Focus=255, 255, 254
BtnTopColor_Focus=255, 254, 253
BtnBottomBgColor_Focus=243, 241, 236
BtnBottomColor_Focus=243, 241, 237
BtnFrameColor_Focus=172, 170, 166
BtnTopBgColor_Select=255, 255, 255
BtnTopColor_Select=236, 239, 248
BtnBottomBgColor_Select=238, 241, 250
BtnBottomColor_Select=216, 223, 244
BtnFrameColor_Select=132, 152, 204
BtnTopBgColor_SelectFocus=255, 255, 254
BtnTopColor_SelectFocus=255, 254, 253
BtnBottomBgColor_SelectFocus=243, 241, 236
BtnBottomColor_SelectFocus=243, 241, 237
BtnFrameColor_SelectFocus=172, 170, 166
BtnTopBgColor_Disable=234, 230, 221
BtnTopColor_Disable=234, 230, 221
BtnBottomBgColor_Disable=234, 230, 221
BtnBottomColor_Disable=234, 230, 221
BtnFrameColor_Disable=157, 155, 151
BtnTopBgColor_MouseDown=234, 230, 221
BtnTopColor_MouseDown=234, 230, 221
BtnBottomBgColor_MouseDown=234, 230, 221
BtnBottomColor_MouseDown=234, 230, 221
BtnFrameColor_MouseDown=157, 155, 151
[MenuRes]
MenuBarUseDefFont=1
MenuBarFontHeight=11
MenuBarFontFace=System
MenuBarCharSet=ANSI_CHARSET
MenuBarFontColor=0,0,0
//MenuBar_Direction : HOR(0), VER(1)
//MenuBar_Postion : Left(0), Right(1) | Top(0), Bottom(1)
//MenuBar_Align : Left(0), Center(1), Right(2) | Top(0), Middle(1), Bottom(2)
//MenuBar_SpecDrawMode : None(0), InCaption(1)
MenuBar_Direction = 0 // Not Support
MenuBar_Postion = 0 // Not Support
MenuBar_Align = 0 // Not Support
MenuBar_SpecDrawMode = 1
MenuItemUseDefFont=1
MenuItemFontHeight=11
MenuItemFontFace=System
MenuItemCharSet=ANSI_CHARSET
MenuItemFontColor=0,0,0
MenuBarItemFrameEllipse=5
MenuItemFrameEllipse=5
MenuItemImgIndexFolder=MenuItemImgIndex
MenuBarHeight=20
MenuItemHeight=22
MenuBarBrush=228,229,240
MenuBarItemFocusBrush=255, 0, 0
MenuBarItemSelectBrush=181, 183, 215
MenuBarItemSelectFramePen=151,151,151
MenuImgColStartColor=255,255,255
MenuImgColEndColor=197,197,197
MenuItemSeparatorColor=166,166,166
MenuItemSelectBrushColorS=255, 255, 255
MenuItemSelectBrushColorE=0, 128, 255
MenuItemSelectFramePen=166,166,166
MenuItemDisableTextColor=166,166,166
MenuBorderColor=151,151,151
MenuWndBkColor=251,251,251
接下来是菜单图标配置文件的说明
这个比较简单,菜单项ID = UnCheck时的图标 | UnCheck时OnFocus的图标 | Check时的图标 | Check时OnFocus的图标 | 被灰掉时的图标
大多数的菜单,只要配置1,2,5三项即可,4,5是给需要有Check效果的菜单使用的
57635 = MENUITEM_IMG_CUT_UNCHECK.bmp | MENUITEM_IMG_CUT_UNCHECK_FOCUS.bmp | MENUITEM_IMG_CUT_CHECK.bmp | MENUITEM_IMG_CUT_CHECK_FOCUS.bmp | MENUITEM_IMG_CUT_UNCHECK_DISABLE.bmp
57664 = MENUITEM_IMG_HELP_UNCHECK.bmp | MENUITEM_IMG_HELP_FOCUS_UNCHECK_FOCUS.bmp