跳转至

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)&param, 0);

资源管理最佳实践

1. 系统资源使用

  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);
    }
    

  2. 全局初始化

    // 初始化全局资源
    theApp->Init(_T("xml_init"));
    

2. 资源组织策略

  1. 分类管理
  2. 按功能模块划分
  3. 遵循命名规范
  4. 保持目录结构清晰

  5. 资源复用

  6. 提取共用资源
  7. 避免重复定义
  8. 合理使用主题

  9. 性能优化

  10. 选择合适的加载方式
  11. 控制资源大小
  12. 按需加载

注意事项

  1. 命名规范
  2. 避免与系统资源名冲突
  3. 使用有意义的名称
  4. 保持命名一致性

  5. 资源加载

  6. 检查加载结果
  7. 处理加载失败
  8. 资源释放时机

  9. 维护建议

  10. 定期清理无用资源
  11. 更新资源文档
  12. 版本控制管理