# fsys.res.menu 库模块帮助文档

<details>  <summary>接口约定</summary>  <p>
- `enum/loadRes/saveRes` 是枚举、加载和保存 aardio EXE 内嵌文件的主要入口，默认资源类型为字符串 `"RES"`；枚举内嵌库可指定 `"LIB"`。
- `enum` 回调参数为 `module,resType,resName`；字符串保持字符串，数字 ID 为 number。不返回值继续，明确返回 false 停止。路径加载的模块只在调用期间有效。
- `names/types/languages/list` 提供数组查询；`loadMenu/decodeMenu` 是按需使用的菜单解码辅助接口。
- Windows API 常量只提供编辑器自动完成提示，不作运行时声明；实际代码使用 `4/*_RT_MENU*/` 或直接写 `4`。
- `loadRes` 始终返回独立二进制字符串；空资源返回 `""`。
- 字符串类型 `"MENU"` 仍是自定义类型名，数字菜单类型为 `4/*_RT_MENU*/`；数值名称 `0`、`65535` 均支持。
- 显式指定语言（包括 `0`）精确匹配；省略语言才使用 Windows 回退。路径参数自动释放，借用模块不释放。
</p></details>

[资源枚举、加载与保存](https://www.aardio.com/zh-cn/docs/library/fsys/res/)

## fsys.res.menu 成员列表 <a id="fsys.res.menu" href="#fsys.res.menu">&#x23;</a>

### fsys.res.menu.decode(菜单模板) <a id="fsys.res.menu.decode" href="#fsys.res.menu.decode">&#x23;</a>
不访问文件，纯数据解码 MENU/MENUEX 。  
参数 @1 可指定字符串或 buffer 类型的菜单模板资源。  
返回结构与 fsys.res.menu 相同。损坏/截断/过深返回 null,错误文本,13；参数类型错误码 87。

### fsys.res.menu.each([module[,langId]]) <a id="fsys.res.menu.each" href="#fsys.res.menu.each">&#x23;</a>

```aardio
fsys.res.menu.for menu,resId in fsys.res.menu.each(/*参数 @1 可选指定模块句柄或路径；  
参数 @2 可选指定语言 ID。  
返回 menu 为包含菜单树数据的 fsys.res.menu 对象。  
resId 为菜单资源 ID。*/){

}
```

### fsys.res.menu.enum(callback[,module[,langId]]) <a id="fsys.res.menu.enum" href="#fsys.res.menu.enum">&#x23;</a>

```aardio
fsys.res.menu.enum(  
  function(text,id,position,item,resId,level){  
      /*枚举菜单项:  
text 为菜单标题;  
id 为命令 ID（Command ID，标准 MENU 弹出项为 null）;  
position 为在当前层级的序号（自 1 开始）;  
item 为菜单项完整数据表;  
resId 为菜单资源名或资源 ID。  
level 为嵌套深度（顶层为 0）;  
返回 false 停止枚举。*/  
    }  
)
```

## fsys.res 成员列表 <a id="fsys.res" href="#fsys.res">&#x23;</a>

### fsys.res.decode() <a id="fsys.res.decode" href="#fsys.res.decode">&#x23;</a>
[返回对象:fsysResMenuObject](#fsysResMenuObject)

### fsys.res.menu() <a id="fsys.res.menu" href="#fsys.res.menu">&#x23;</a>
[返回对象:fsysResMenuObject](#fsysResMenuObject)

### fsys.res.menu(菜单资源名[,模块句柄或路径[,语言ID]]) <a id="fsys.res.menu" href="#fsys.res.menu">&#x23;</a>
将 RT_MENU 资源解码为普通表 {version;helpId;items}  
同时支持标准 MENU 与扩展 MENUEX，不创建窗口或菜单句柄。  
菜单项目含 id,text,type,state,flags,popup,separator；弹出项另含 items/helpId。  
标准 MENU 的弹出项没有命令 ID（id 为 null）；MENUEX 保留 DWORD ID。  
返回文本使用 UTF-8 编码，保留菜单控制字符 `&` 与 `TAB`，最多允许 64 层嵌套。  
错误返回 null,错误文本,错误码。

## fsysResMenuObject 成员列表 <a id="fsysResMenuObject" href="#fsysResMenuObject">&#x23;</a>

### fsysResMenuObject.helpId <a id="fsysResMenuObject.helpId" href="#fsysResMenuObject.helpId">&#x23;</a>
MENUEX 头帮助 ID，标准 MENU 为 0

### fsysResMenuObject.items <a id="fsysResMenuObject.items" href="#fsysResMenuObject.items">&#x23;</a>
菜单项目纯数组，按原显示顺序  
每项含 id,text,type,state,flags,popup,separator。  
弹出项另含 items/helpId；标准 MENU 弹出项的 id 为 null。

### fsysResMenuObject.version <a id="fsysResMenuObject.version" href="#fsysResMenuObject.version">&#x23;</a>
模板版本：0 表示 MENU，1 表示 MENUEX
