Global 全局样式提供了通用的样式列表,避免在多个不同的 XML 中出现相同的描述而产生冗余的代码和消耗开发人员在界面设上的时间。
在调用 GlobalManager::Startup 方法后,会根据设定的皮肤资源路径下查找 global.xml
作为全局的样式资源。在现有的 samples 示例代码中,
包含了一些预设的全局样式,如字体、颜色和一些通用样式。
如果你想添加一个字体,则在 global.xml
中添加如下代码,程序启动后会根据字体位置顺序依次给字体进行编号,排在第一位的字体编号为 0,第二位的为 1,依次递增。
<!-- name 代表字体名称,size 代表字体大小,bold 代表是否粗体,underline 代表是否包含下划线 -->
<Font name="system" size="10" bold="true" underline="true"/>
当需要使用时,指定字体的编号即可。比如你希望一个 Button 按钮使用第 2 号字体,可以这样写:
<Button text="Hello Button" font="2"/>
属性名称 | 默认值 | 参数类型 | 用途 |
---|---|---|---|
name | STRING | 字体名称 | |
size | 12 | INT | 字体大小 |
bold | false | BOOL | 是否粗体 |
underline | false | BOOL | 是否下划线 |
italic | false | BOOL | 是否斜体 |
你可以添加常用的颜色到 global.xml
中,如下所示:
<!-- name 是颜色的名称,value 是颜色的具体数值 -->
<TextColor name="textdefaultcolor" value="#ff333333"/>
这样当你需要使用这个颜色给一个 Label 设置文字颜色时,可以这样写:
<Label text="Hello Label" normaltextcolor="textdefaultcolor"/>
属性名称 | 默认值 | 参数类型 | 用途 |
---|---|---|---|
name | STRING | 颜色名称 | |
value | STRING | 颜色值如 0xFFFFFFFF |
通用样式可以让我们预设一些经常使用到的样式集合,比如一个高度为 34,宽度自动拉伸、使用 caption.png 作为背景的标题栏。 又或者一个宽度为 80,高度为 30 的通用样式按钮等等。我们都可以通过通用样式来解决。以下示例演示了一个通用样式按钮:
<!-- name 是通用样式的名称,value 是通用样式的具体样式值 -->
<Class name="btn_global_blue_80x30" value="font="7" normaltextcolor="white" normalimage="file='../public/button/btn_global_blue_80x30_normal.png'" hotimage="file='../public/button/btn_global_blue_80x30_hovered.png'" pushedimage="file='../public/button/btn_global_blue_80x30_pushed.png'" disabledimage="file='../public/button/btn_global_blue_80x30_normal.png' fade='80'""/>
以上代码定义了一个按钮通用样式,命名为 btn_global_blue_80x30
,使用字体编号为7,普通样式下字体颜色为 white
,
并分别设置了普通状态、焦点状态和按下状态不同的背景图片,最后还启用了动画效果。当我们需要给一个按钮应用这个通用样式时,可以这样写:
<Button class="btn_global_blue_80x30" text="classic button"/>
要注意的是,class
属性必须在所有属性最前面,当你需要覆盖一个通用样式中指定过的属性时,只需要在 class
属性之后再重新定义这个属性就可以了。比如我希望我的按钮不使用通用样式的字体样色,可以这样写:
<Button class="btn_global_blue_80x30" font="2" text="classic button"/>
属性名称 | 默认值 | 参数类型 | 用途 |
---|---|---|---|
name | STRING | 通用样式名称 | |
value | STRING | 通用样式值,必须经过XML转义 |
初始化全局设置函数
static void Startup(const std::wstring& strResourcePath, const CreateControlCallback& callback, bool bAdaptDpi, const std::wstring& theme = L"themes\\default", const std::wstring& language = L"lang\\zh_CN")
- 参 数:
strResourcePath
资源路径位置callback
创建自定义控件时的全局回调函数bAdaptDpi
是否启用 DPI 适配theme
主题目录名,默认为 themes\defaultlanguage
使用语言,默认为 lang\zh_CN
- 返回值:无
释放资源
static void Shutdown()
- 参 数:无
- 返回值:无
获取当前程序所在目录
static std::wstring GetCurrentPath()
- 参 数:无
- 返回值:返回当前程序所在目录
获取当前资源所在目录
static std::wstring GetResourcePath()
- 参 数:无
- 返回值:返回当前资源所在目录
设置程序当前目录
static void SetCurrentPath(const std::wstring& strPath)
- 参 数:
strPath
要设置的路径
- 返回值:无
设置皮肤资源所在目录
static void SetResourcePath(const std::wstring& strPath)
- 参 数:
strPath
要设置的路径
- 返回值:无
重新加载皮肤资源
static void ReloadSkin(const std::wstring& resourcePath)
- 参 数:
resourcePath
资源路径
- 返回值:无
获取绘制接口类对象
static IRenderFactory* GetRenderFactory()
- 参 数:无
- 返回值:返回接口类对象指针
创建全局的绘制上下文区域
static std::unique_ptr<IRenderContext> CreateRenderContext()
- 参 数:无
- 返回值:返回绘制区域对象
创建一个画笔
static std::unique_ptr<IPen> CreatePen(DWORD color, int width = 1)
- 参 数:
color
画笔颜色width
画笔宽度
- 返回值:返回画笔对象
创建一个画刷
static std::unique_ptr<IBrush> CreateBrush(DWORD color)
- 参 数:
color
画刷颜色
- 返回值:返回画刷对象
创建一个矩阵
static std::unique_ptr<IMatrix> CreateMatrix()
- 参 数:无
- 返回值:返回矩阵对象
创建一个绘制路径
static std::unique_ptr<IPath> CreatePath()
- 参 数:无
- 返回值:返回绘制路径对象
添加一个全局 class 属性
static void AddClass(const std::wstring& strClassName, const std::wstring& strControlAttrList)
- 参 数:
strClassName
全局 class 名称strControlAttrList
属性列表,需要做 XML 转义
- 返回值:无
获取一个全局 class 属性的值
static std::wstring GetClassAttributes(const std::wstring& strClassName)
- 参 数:
strClassName
全局 class 名称
- 返回值:返回字符串形式的 class 属性值
从全局属性中删除所有 class 属性
static void RemoveAllClasss()
- 参 数:无
- 返回值:返回绘制区域对象
添加一个全局颜色值提供程序使用
static void AddTextColor(const std::wstring& strName, const std::wstring& strValue)
- 参 数:
strName
颜色名称(如 white)strValue
颜色具体数值(如 #FFFFFFFF)
- 返回值:无
根据名称获取一个颜色的具体数值
static DWORD GetTextColor(const std::wstring& strName)
- 参 数:
strName
要获取的颜色名称
- 返回值:返回 DWORD 格式的颜色描述值
删除所有全局颜色属性
static void RemoveAllTextColors()
- 参 数:无
- 返回值:无
检查指定图片是否已经被缓存
static std::shared_ptr<ImageInfo> IsImageCached(const std::wstring& bitmap)
- 参 数:
bitmap
图片路径
- 返回值:如果已经被缓存,则返回 ImageInfo 的智能指针对象
添加一个图片到缓存中
static std::shared_ptr<ImageInfo> AddImageCached(const std::shared_ptr<ImageInfo>& shared_image)
- 参 数:
- `shared_image
- 返回值:返回被缓存的 ImageInfo 智能指针对象
从缓存中一处一个图片
static void RemoveFromImageCache(const std::wstring& imageFullPath)
- 参 数:
imageFullPath
图片路径
- 返回值:无
图片被销毁的回调
static void OnImageInfoDestroy(ImageInfo *pImageInfo)
- 参 数:
pImageInfo
图片对应的 ImageInfo 对象
- 返回值:无
获取图片 ImageInfo 对象
static std::shared_ptr<ImageInfo> GetImage(const std::wstring& bitmap)
- 参 数:
bitmap
图片路径
- 返回值:返回图片 ImageInfo 对象的智能指针
从缓存中删除所有图片
static void RemoveAllImages()
- 参 数:无
- 返回值:无
获取默认字体名称
static std::wstring GetDefaultFontName()
- 参 数:无
- 返回值:字体名称
添加一个字体
static HFONT AddFont(const std::wstring& strFontName, int nSize, bool bBold, bool bUnderline, bool bItalic)
- 参 数:
strFontName
字体名称nSize
字体大小bBold
是否粗体bUnderline
是否有下划线bItalic
是否倾斜
- 返回值:返回字体的 HFONT 句柄
根据索引返回一个字体信息
static TFontInfo* GetTFontInfo(std::size_t index)
- 参 数:
index
字体索引
- 返回值:返回字体的 TFontInfo 信息
根据索引返回一个字体对象
static HFONT GetFont(std::size_t index)
- 参 数:
index
字体索引
- 返回值:返回字体的 HFONT 句柄
根据字体属性获取字体对象
static HFONT GetFont(const std::wstring& strFontName, int nSize, bool bBold, bool bUnderline, bool bItalic)
- 参 数:
strFontName
字体名称nSize
字体大小bBold
是否粗体bUnderline
是否有下划线bItalic
是否倾斜
- 返回值:返回字体的 HFONT 句柄
获取字体信息
static TFontInfo* GetFontInfo(std::size_t index, HDC hDcPaint)
- 参 数:
index
字体索引hDcPaint
设备句柄
- 返回值:返回字体的 TFontInfo 信息
获取字体信息
static TFontInfo* GetFontInfo(HFONT hFont, HDC hDcPaint)
- 参 数:
hFont
字体对象句柄hDcPaint
设备句柄
- 返回值:返回字体的 TFontInfo 信息
根据字体对象查找指定字体是否存在
static bool FindFont(HFONT hFont)
- 参 数:
hFont
字体对象句柄
- 返回值:返回是否存在
根据字体信息查找字体是否存在
static bool FindFont(const std::wstring& strFontName, int nSize, bool bBold, bool bUnderline, bool bItalic)
- 参 数:
strFontName
字体名称nSize
字体大小bBold
是否粗体bUnderline
是否有下划线bItalic
是否倾斜
- 返回值:返回是否存在
根据字体索引删除字体
static bool RemoveFontAt(std::size_t index)
- 参 数:
index
字体索引
- 返回值:返回是否删除成功
删除所有字体
static void RemoveAllFonts()
- 参 数:无
- 返回值:无
获取默认禁用状态下字体颜色
static std::wstring GetDefaultDisabledTextColor()
- 参 数:无
- 返回值:默认禁用状态颜色的字符串表示,对应 global.xml 中指定颜色值
设置默认禁用状态下的字体颜色
static void SetDefaultDisabledTextColor(const std::wstring& strColor)
- 参 数:
dwColor
字体颜色字符串值(如 white)
- 返回值:无
获取默认字体颜色
static std::wstring GetDefaultTextColor()
- 参 数:无
- 返回值:默认字体颜色字符串表示,对应 global.xml 中指定颜色值
设置默认字体颜色
static void SetDefaultTextColor(const std::wstring& strColor)
- 参 数:
字体颜色的字符串值,对应
global.xml 中指定颜色值
- 返回值:无
获取默认链接字体颜色
static DWORD GetDefaultLinkFontColor()
- 参 数:无
- 返回值:链接字体颜色 DWORD 格式的色值
设置默认链接字体颜色
static void SetDefaultLinkFontColor(DWORD dwColor)
- 参 数:
dwColor
默认链接字体颜色
- 返回值:无
获取焦点链接的默认字体颜色
static DWORD GetDefaultLinkHoverFontColor()
- 参 数:无
- 返回值:返回焦点链接的默认字体颜色
设置焦点链接的默认字体颜色
static void SetDefaultLinkHoverFontColor(DWORD dwColor)
- 参 数:
dwColor
焦点链接的默认字体颜色
- 返回值:无
获取默认选择状态字体颜色
static DWORD GetDefaultSelectedBkColor()
- 参 数:无
- 返回值:返回默认选择状态的字体颜色
设置默认选择状态的字体颜色
static void SetDefaultSelectedBkColor(DWORD dwColor)
- 参 数:
dwColor
字体颜色值
- 返回值:无
根据 XML 创建一个 Box
static Box* CreateBox(const std::wstring& strXmlPath, CreateControlCallback callback = CreateControlCallback()
- 参 数:
strXmlPath
XML 文件路径callback
自定义控件的回调处理函数
- 返回值:指定布局模块的对象指针
根据 XML 在缓存中查找指定 Box,如果没有则创建
static Box* CreateBoxWithCache(const std::wstring& strXmlPath, CreateControlCallback callback = CreateControlCallback()
- 参 数:
strXmlPath
XML 文件路径callback
自定义控件的回调处理函数
- 返回值:指定布局模块的对象指针
使用 XML 填充指定 Box
static void FillBox(Box* pUserDefinedBox, const std::wstring& strXmlPath, CreateControlCallback callback = CreateControlCallback()
- 参 数:
pUserDefinedBox
要填充的 box 指针strXmlPath
XML 文件路径callback
自定义控件的回调处理函数
- 返回值:无
使用构建过的缓存填充指定 Box,如果没有则重新构建
static void FillBoxWithCache(Box* pUserDefinedBox, const std::wstring& strXmlPath, CreateControlCallback callback = CreateControlCallback()
- 参 数:
pUserDefinedBox
要填充的 box 指针strXmlPath
XML 文件路径callback
自定义控件的回调处理函数
- 返回值:无
自定义控件创建后的全局回调函数
static Control* CreateControl(const std::wstring& strControlName)
- 参 数:
strControlName
自定义控件名称
- 返回值:返回一个自定义控件的对象指针
判断当前是否使用了 zip 压缩包
static bool IsUseZip()
- 参 数:无
- 返回值:返回 true 表示使用了 zip 压缩包作为资源,false 为普通目录模式
打开一个内存压缩包资源
static bool OpenResZip(LPCTSTR resource_name, LPCTSTR resource_type, const std::string& password)
- 参 数:
resource_name
资源名称,由 MAKEINTRESOURCE 宏生成resource_type
资源类型,自定义导入的资源类型名称password
压缩包密码
- 返回值:返回 true 打开成功,返回 false 为打开失败
打开一个本地文件压缩包资源
static bool OpenResZip(const std::wstring& path, const std::string& password)
- 参 数:
path
压缩包文件路径password
压缩包密码
- 返回值:返回 true 打开成功,返回 false 为打开失败
获取压缩包中的内容到内存
static HGLOBAL GetData(const std::wstring& path)
- 参 数:
path
要获取的文件的路径
- 返回值:返回文件的内存地址
获取文件在压缩包中的位置
static std::wstring GetZipFilePath(const std::wstring& path)
- 参 数:
path
要获取的文件路径
- 返回值:返回在压缩包中的文件位置
加载全局资源
static void LoadGlobalResource()
- 参 数:无
- 返回值:无