SOUI资源组织规范¶
SOUI框架中的资源组织分为两大类:系统默认资源(主题资源)和应用程序自定义资源。本文详细介绍这两种资源的组织方式和使用方法。
系统默认资源¶
系统资源(主题资源)分为三个主要部分:
1. 控件默认皮肤¶
默认皮肤为SOUI的基础控件提供统一的外观:
// 系统预定义的皮肤名称
const wchar_t * BUILDIN_SKIN_NAMES[]= {
L"_skin.sys.checkbox",
L"_skin.sys.radio",
L"_skin.sys.focuscheckbox",
L"_skin.sys.focusradio",
L"_skin.sys.btn.normal",
L"_skin.sys.scrollbar",
// ... 其他系统皮肤
};
特点: - 以"_skin.sys."为前缀 - 可按需提供 - 统一控件外观
2. 系统消息框模板¶
提供默认的消息框布局模板:
<SOUI title="mesagebox" width="200" height="100" appwin="0"
frameSize="40,30,10,80" minSize="300,100" resize="0"
translucent="1" trCtx="messagebox">
<style>
<class name="normalbtn" skin="_skin.sys.btn.normal" />
</style>
<root>
<!-- 消息框布局结构 -->
</root>
</SOUI>
要点: - 可自定义外观 - 保持必要的命名对象 - 支持布局调整
3. Edit控件菜单¶
提供标准的编辑框右键菜单:
<editmenu trCtx="editmenu" iconSkin="_skin.sys.icons"
itemHeight="26" iconMargin="4" textMargin="8">
<item id="1" icon="3">cut</item>
<item id="2" icon="4">copy</item>
<item id="3" icon="5">paste</item>
<item id="4">delete</item>
<sep/>
<item id="5">select all</item>
</editmenu>
规范: - 固定ID(1-5) - 可调整项目顺序 - 支持图标定制
应用程序自定义资源¶
1. 资源定义规范¶
在uires.idx中定义:
<resource>
<!-- UI定义 -->
<UIDEF>
<file name="xml_init" path="xml/init.xml" />
</UIDEF>
<!-- 图标资源 -->
<ICON>
<file name="LOGO" path="image/img_logo.ico" />
</ICON>
<!-- 其他资源类型 -->
</resource>
2. 资源类型扩展¶
支持多种资源类型: - UIDEF:界面定义 - ICON:图标资源 - CURSOR:光标 - LAYOUT:布局文件 - IMGX:图片资源 - GIF:动画 - RTF:富文本 - SCRIPT:脚本 - TRANSLATOR:翻译
3. 资源加载方式¶
文件方式¶
CreateResProvider(RES_FILE, (IObjRef**)&pResProvider);
pResProvider->Init((LPARAM)_T("uires"), 0);
PE资源方式¶
CreateResProvider(RES_PE, (IObjRef**)&pResProvider);
pResProvider->Init((WPARAM)hInstance, 0);
ZIP包方式¶
CreateResProvider_ZIP((IObjRef**)&pResProvider);
ZIPRES_PARAM param;
param.ZipFile(pRenderFactory, _T("uires.zip"), "souizip");
pResProvider->Init((WPARAM)¶m, 0);
资源管理最佳实践¶
1. 系统资源使用¶
-
初始化步骤
// 加载系统资源 HMODULE hSysResource = LoadLibrary(SYS_NAMED_RESOURCE); if(hSysResource) { CAutoRefPtr<IResProvider> sysSesProvider; CreateResProvider(RES_PE, (IObjRef**)&sysSesProvider); sysSesProvider->Init((WPARAM)hSysResource, 0); theApp->LoadSystemNamedResource(sysSesProvider); }
-
全局初始化
// 初始化全局资源 theApp->Init(_T("xml_init"));
2. 资源组织策略¶
- 分类管理
- 按功能模块划分
- 遵循命名规范
-
保持目录结构清晰
-
资源复用
- 提取共用资源
- 避免重复定义
-
合理使用主题
-
性能优化
- 选择合适的加载方式
- 控制资源大小
- 按需加载
注意事项¶
- 命名规范
- 避免与系统资源名冲突
- 使用有意义的名称
-
保持命名一致性
-
资源加载
- 检查加载结果
- 处理加载失败
-
资源释放时机
-
维护建议
- 定期清理无用资源
- 更新资源文档
- 版本控制管理