
# 界面配置
#### Config
**接口描述**
Windows SDK中已经提供了会议中的界面，界面上的部分元素是可以自定义的。可以自定义的界面元素如下：
- **会议窗口名称**
会议开始后，在Windows任务栏上会生成一个会议的图标，鼠标指向该图标时会显示会议的缩略窗口，该窗口的名称可以自定义。
图1会议窗口名称   
![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000001173122691.png)
![](https://support.huaweicloud.com/sdkreference-meeting/public_sys-resources/note_3.0-zh-cn.png)
会议窗口的图标，可以替换HwmSdk\\sdkResources\\nativeimg目录下的video.ico图标文件。
- **会议信息及会议链接前缀**
会议链接的域名前缀默认是https://bmeeting.huaweicloud.com/（如https://bmeeting.huaweicloud.com/#/j/982989574），如果入会Portal是第三方自己开发的，这个前缀需要自定义。
整个会议信息也可以自定义显示或者隐藏。
图2会议信息   
![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000001127072318.png)
- **来电窗口**
会议来电窗口默认在收到来电时弹出，可配置成隐藏，在收到来电通知时调用会议来电应答接口来应答：
图3来电窗口
![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000001173849557.png)
- **会控按钮**
1. 删除或者修改SDK中自带的会控按。具体可以删除和修改的按钮见[按钮ID定义表]。
2. 自定义新增按钮。具体用例见[自定义会控按钮](https://support.huaweicloud.com/sdkreference-meeting/toctopics/zh-cn_topic_0000001268359817.html)。
图4底部工具栏和更多菜单
![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000001173245297.png)
图5共享工具栏和更多菜单
![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000001173291091.png)
图6自定义子菜单项：
![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000001262736757.png)
- **自定义会议信息窗口**
图7自定义会议信息框
![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000001127254634.png)
图8状态工具栏
![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000001270433602.png)
图9与会者详情头像点击   
![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000001362492813.png)
![](https://support.huaweicloud.com/sdkreference-meeting/public_sys-resources/note_3.0-zh-cn.png)
自定义会议信息窗口请参考"[显示会议信息框](https://support.huaweicloud.com/sdkreference-meeting/meeting_02_0002.html)"和"[销毁会议信息框](https://support.huaweicloud.com/sdkreference-meeting/meeting_02_0003.html)"。
**注意事项**
1. 只有需要更改会议界面默认显示样式时，才需要调用该接口，若默认样式已满足要求，可以不调用该接口。
2. 该接口为异步接口，返回值只代表接口是否调用成功，实际业务处理结果在对应的回调函数中返回。
**方法定义**
```
HWM_SDK_AGENT_API hwmsdk::HwmErrCode Config(char uiConfig[HWM_MAX_CONFIG_LEN]);
```
![](https://support.huaweicloud.com/sdkreference-meeting/public_sys-resources/note_3.0-zh-cn.png)
Config接口不能连续调用，如果需要调用两次Config接口，一定要等第一次OnConfigResult回调函数处理完成后，再调用第二次Config。
**回调函数**
```
virtual void OnConfigResult(hwmsdk::HwmErrCode ret, const char* reason) {};
```
**参数描述**
表1参数说明 
| 参数       | 是否必须 | 类型       | 描述                                                               |
|:---|:---|:---|:---|
| uiConfig | 是    | char\[\] | Json对象字符串"{"frame":object}"， object对象有格式要求，若不匹配则配置不生效。详细规则见以下表格。 |
   
 表2frame对象介绍 
| key                           | value类型 | 描述                                                                                                                  |
|:---|:---|:---|
| name                          | string  | 会议窗口名称。如[图1]中的窗口名称（MyApp）。                                                |
| linkPrefix                    | string  | 会议窗口中分享的会议链接前缀。如[图2]中复制出来的会议链接。                                          |
| confMenu                      | object  | 会议窗口上的按钮配置对象。如[图4]和[图5]中的4类按钮。 |
| isUseExternalConfInfoWnd      | bool    | 会议窗口中自定义分享会议信息框开关。如[图6]中的窗口。"true" ：开启 ；"false" ：关闭，默认 "false" 关闭。     |
| isUseExternalAddressBook      | bool    | 会议窗口中使用外部通讯录头像信息的开关。"true": 使用 ；"false": 不使用，默认 "false"不使用                                                          |
| isHideConfIncomingWindow      | bool    | 是否隐藏会议来电弹窗。"true":隐藏，会议来电不弹窗；"false"不隐藏，正常弹窗，默认不隐藏，正常弹窗。                                                            |
| defaultWindowMode             | int     | 会议窗口模式。0 通常；1最大化；2全屏。默认通常。                                                                                          |
| isCloseSideWindow             | bool    | 是否关闭侧边窗口: "false": 不关闭；"true":关闭。默认不关闭。                                                                             |
| flowControlInitShowPos        | int     | 共享工具栏初始化位置：0：顶部 1：底部。默认显示顶部。                                                                                        |
| defaultWindowMonitor          | int     | 会议窗口入会时默认创建在哪个显示器：0主显示器，1副显示器。默认在主显示器。                                                                              |
| isHideTransferHostBeforeLeave | bool    | 是否隐藏离会时指定主持人功能按钮："false": 不隐藏；"true":隐藏。默认不隐藏。                                                                      |
| isUploadKeyLog                | bool    | 是否自动收集日志的开关。"true"：收集；"false": 不收集。默认"true"收集。                                                                      |
   
表3confMenu对象介绍 
| key       | value类型 | 描述                                                                                                                  |
|:---|:---|:---|
| toolBar   | object  | 会议窗口上的按钮配置对象。如[图4]和[图5]中的4类按钮。 |
| titleBar  | object  | 会议窗口上的标题栏配置对象。如[图2]中的会议信息。                                               |
| statusBar | object  | 会议窗口左上角的状态栏配置对象。如[图8]中的按钮                                              |
   
表4toolBar对象子key介绍 
| key          | value类型    | 描述                                                                                                                          |
|:---|:---|:---|
| button       | object\[\] | 会议窗口上的按钮配置对象。如[图4]和[图5]中的4类按钮和菜单。      |
| customButton | object\[\] | 会议窗口上的第三方自定义按钮配置对象。如[图4]中的③④和[图5]中的①②。 |
   
表5statusBar对象子key介绍 
| key    | value类型    | 描述                                                                          |
|:---|:---|:---|
| button | object\[\] | 会议窗口左上角的状态栏上的按钮配置对象。如[图8]中的按钮。 |
   
表6button对象子key介绍 
| key               | value类型 | 描述                                                                      |
|:---|:---|:---|
| id                | string  | 按钮的唯一标识。具体id与按钮的对应关系见[表9]。 |
| showAsAction      | string  | 是否显示。只有2个取值，"never"：不显示，"ifRoom"：显示。                                    |
| isCustomizedClick | bool    | 是否点击注入。true：点击注入，用户点击按钮时发送通知消息，SDK不做点击响应处理。                             |
   
表7customButton对象子key介绍 
| key       | value类型    | 描述                                                                                                         |
|:---|:---|:---|
| id        | string     | 第三方自定义的按钮id。如"customMenu"。                                                                                 |
| title     | string     | 第三方自定义按钮的显示的名称。如"自定义按钮"。                                                                                   |
| buttonImg | string     | 第三方自定义按钮的图标路径，使用绝对路径。如"to/path/image.svg"，支持svg/png等格式 注：需要UTF8编码。 |
| buttonPos | int        | 第三方自定义按钮的位置。0：工具栏更多菜单，1：底部工具栏，2：共享工具栏                                                                      |
| subMenu   | object\[\] | 第三方自定义按钮的子菜单项。\*（最多配置到三级：深入两次）                                                                             |
   
表8subMenu对象子key介绍 
| key       | value类型    | 描述                                                                                                          |
|:---|:---|:---|
| id        | string     | 第三方自定义的按钮id。如"customMenu"。                                                                                  |
| title     | string     | 第三方自定义按钮的显示的名称。如"自定义按钮"。                                                                                    |
| buttonImg | string     | 第三方自定义按钮的图标路径，使用绝对路径。如"to/path/image.svg"，支持svg/png等格式 注：需要UTF8编码。 |
| subMenu   | object\[\] | 第三方自定义按钮的子菜单项。                                                                                              |
   
 表9按钮id介绍 
| 按钮名称                 | 按钮id                      | 说明                                                                                                           |
|:---|:---|:---|
| 麦克风                  | "microphone"              | 可隐藏                                                                                                          |
| 扬声器                  | "speaker"                 | 可隐藏                                                                                                          |
| 摄像头                  | "camera"                  | 可隐藏                                                                                                          |
| 邀请                   | "invite"                  | 可隐藏，可注入                                                                                                      |
| 离开                   | "leave"                   | 可隐藏，可注入                                                                                                      |
| 共享                   | "share"                   | 可隐藏，可注入。可通过调用[开启共享](https://support.huaweicloud.com/sdkreference-meeting/meeting_control_0007.html)接口来实现共享能力 |
| 与会者                  | "attendee"                | 可隐藏，可注入                                                                                                      |
| 呼叫其它号码               | "call_other_number"       | 可隐藏，可注入                                                                                                      |
| 反馈                   | "feedback"                | 可隐藏，可注入                                                                                                      |
| 举手/手放下               | "hands_up"                | 可隐藏                                                                                                          |
| 申请主持人/释放主持人          | "change_chairman_auth"    | 可隐藏                                                                                                          |
| 改名                   | "rename"                  | 可隐藏                                                                                                          |
| 锁定会议                 | "lock_conf"               | 可隐藏                                                                                                          |
| 标注                   | "annotation"              | 可隐藏                                                                                                          |
| 授予远程控制               | "remote_control"          | 可隐藏                                                                                                          |
| 停止共享                 | "stop_share"              | 可隐藏                                                                                                          |
| 聊天                   | "chat"                    | 可隐藏，可注入                                                                                                      |
| 导出与会者                | "export_participants"     | 可隐藏                                                                                                          |
| 入会范围                 | "attendee_access_control" | 可隐藏                                                                                                          |
| 允许共享                 | "lock_Share"              | 可隐藏                                                                                                          |
| 字幕功能：开启字幕、字幕翻译       | "subtitle"                | 可隐藏                                                                                                          |
| 安全                   | "security"                | 可隐藏                                                                                                          |
| 邀请共享、取消共享            | "invite_or_cancel_share"  | 可隐藏                                                                                                          |
| 隐藏无视频与会者             | "hide_no_video_view"      | 可隐藏                                                                                                          |
| 视频画面智能排序             | "video_smart_sorting"     | 可隐藏                                                                                                          |
| 虚拟背景                 | "virtual_background"      | 可隐藏                                                                                                          |
| 网络检测                 | "network_detection"       | 可隐藏                                                                                                          |
| 全场静音/取消全场静音          | "mute_all"                | 可隐藏                                                                                                          |
| 允许与会者解除静音            | "allow_unmute"            | 可隐藏                                                                                                          |
| 打开/关闭双屏模式            | "dual_screen"             | 可隐藏                                                                                                          |
| 录制                   | "record"                  | 可隐藏                                                                                                          |
| 共享画面质量策略：清晰度优先、流畅度优先 | "share_strategy"          | 可隐藏                                                                                                          |
| 共享时隐藏视频窗口            | "share_hide_video"        | 可隐藏                                                                                                          |
| 共享时包含电脑声音            | "share_audio"             | 可隐藏                                                                                                          |
| 复制会议信息               | "copy_conf_info"          | 可注入                                                                                                          |
| 全员移入等候室              | "moveall_to_waitingroom"  | 可隐藏                                                                                                          |
| 与会者详情                | "participant_detail"      | 可注入，见[图9]                                                       |
| 复制观众链接               | "copy_audience_conf_info" | 可注入                                                                                                          |
| 全部呼叫                 | "call_all"                | 可隐藏，可注入                                                                                                      |
| 呼叫                   | "recall"                  | 可注入                                                                                                          |
   
表10titleBar对象子key介绍 
| key        | value类型    | 描述                                                                                    |
|:---|:---|:---|
| confDetail | object\[\] | 如[图2]中的会议信息。showAsAction设置成never后，不显示会议信息。 |
   
表11confDetail的对象key介绍 
| key          | value类型    | 描述                                   |
|:---|:---|:---|
| showAsAction | string     | 是否显示。只有2个取值，"never"：不显示，"ifRoom"：显示。 |
| button       | object\[\] | 会议信息窗口上的按钮配置对象。                      |
   
按照上面的定义，完整的可定制的界面元素的json格式配置项如下：
```
{
    "frame":{
        "name":"MyApp",
        "linkPrefix":"https://www.demo.com/",
        "isUseExternalConfInfoWnd":false,
        "isUseExternalAddressBook":false,
        "confMenu":{
            "titleBar":{
                 "confDetail":{
                      "showAsAction":"never",
                 "button":[
                     {
                        "id":"copy_conf_info",
                        "isCustomizedClick":false
                     }
                  ]
            },
            "statusBar": {        
                  "button": [          
                      {            
                          "id": "record",            
                          "showAsAction": "never"          
                      }       
                    ]      
             },
            "toolBar":{
                "customButton": [
                   {
        "id": "customMenu",
"title": "自定义按钮",
                        "buttonImg": "D:/demoResource/icon-whiteboard.svg",
                        "buttonPos": 1
    }],
                "button":[
                    {
                        "id":"microphone",
                        "showAsAction":"ifRoom"
                    },
                    {
                        "id":"speaker",
                        "showAsAction":"ifRoom"
                    },
                    {
                        "id":"camera",
                        "showAsAction":"ifRoom"
                    },
                    {
                        "id":"invite",
                        "showAsAction":"ifRoom",
                        "isCustomizedClick":true
                    },
                   {
                        "id":"leave",
                        "showAsAction":"ifRoom",
                        "isCustomizedClick":true
                    },
                   {
                        "id":"share",
                        "showAsAction":"never",
                        "isCustomizedClick":true
                    },
                   {
                        "id":"attendee",
                        "showAsAction":"ifRoom",
                        "isCustomizedClick":true
                    },
                   {
                        "id":"call_other_number",
                        "showAsAction":"ifRoom",
                        "isCustomizedClick":true
                    },
                   {
                        "id":"feedback",
                        "showAsAction":"never"
                    },
                   {
                        "id":"hands_up",
                        "showAsAction":"never"
                    },
                   {
                        "id":"change_chairman_auth",
                        "showAsAction":"never",
                        "isCustomizedClick":false
                    },
                   {
                        "id":"rename",
                        "showAsAction":"never"
                    },
                   {
                        "id":"lock_conf",
                        "showAsAction":"never"
                    },
                   {
                        "id":"annotation",
                        "showAsAction":"never"
                    },
                   {
                        "id":"remote_control",
                        "showAsAction":"never"
                    },
                   {
                        "id":"stop_share",
                        "showAsAction":"never"
                    },
                   {
                        "id":"chat",
                        "showAsAction":"ifRoom",
                        "isCustomizedClick":true
                    },
                   {
                        "id":"export_participants",
                        "showAsAction":"never"
                    },
                   {
                        "id":"attendee_access_control",
                        "showAsAction":"never"
                    },
                   {
                        "id":"network_detection",
                        "showAsAction":"never"
                    },
                   {
                        "id":"mute_all",
                        "showAsAction":"never"
                    },
                   {
                        "id":"allow_unmute",
                        "showAsAction":"never"
                    },
                   {
                        "id":"dual_screen",
                        "showAsAction":"never"
                    },
                   {
                        "id":"record",
                        "showAsAction":"never"
                    },
                   {
                        "id":"vote",
                        "showAsAction":"never"
                    }
                ]
            }
        }
    }
}
```
![](https://support.huaweicloud.com/sdkreference-meeting/public_sys-resources/note_3.0-zh-cn.png)
由于函数Config的uiConfig是字符数组，需要把上述的json转换成字符串形式，请参考下面的示例代码。
**示例代码**
```
/**
* UI界面配置
*/
int hwmSDKConfigUI::hwmSDKStartUIConfigTotal()
{
    CString start = "{\"frame\":{";
 
    //会议窗口名称
    CString name = "\"name\":\"MyApp\"";
 
    //会议链接前缀
    CString linkPrefix = "\"linkPrefix\":\"https://www.demo.com/\"";
    //自定义外部会议信息框开关
    CString isUseExternalConfInfoWnd = "\"isUseExternalConfInfoWnd\":\"false\"";
    //外部通讯录开关
    CString isUseExternalAddressBook = "\"isUseExternalAddressBook\":\"false\"";
    CString menuStart = "\"confMenu\":{";
    //会议信息
    CString titleBar = "\"titleBar\":{\"confDetail\":{\"showAsAction\":\"ifRoom\"}}";
    CString toolBarStart = "\"toolBar\":{";
    //自定义按钮
    CString customMenuStart = "\"customButton\":[";
    CString customMenu1 = "{\"id\":\"customMenu1\",\"title\":\"自定义按钮1\"}";
    CString customMenu2 = "{\"id\":\"customMenu2\",\"title\":\"自定义按钮2\"}";
    CString customMenuEnd = "]";
 
    //会控按钮
    CString buttonStart = "\"button\":[";
    CString inviateButton = "{\"id\":\"invite\",\"showAsAction\":\"ifRoom\",\"isCustomizedClick\":true}";
    CString leaveButton = "{\"id\":\"leave\",\"showAsAction\":\"ifRoom\",\"isCustomizedClick\":true}";
    CString callButton = "{\"id\":\"call_other_number\",\"showAsAction\":\"ifRoom\",\"isCustomizedClick\":true}";
    CString attendeeButton = "{\"id\":\"attendee\",\"showAsAction\":\"ifRoom\",\"isCustomizedClick\":true}";
    CString shareButton = "{\"id\":\"share\",\"showAsAction\":\"ifRoom\",\"isCustomizedClick\":true}";
    CString annotationButton = "{\"id\":\"annotation\",\"showAsAction\":\"never\"}";
    CString stopshareButton = "{\"id\":\"stop_share\",\"showAsAction\":\"never\"}";
    CString feedbackButton = "{\"id\":\"feedback\",\"showAsAction\":\"never\"}";
    CString remotecontrolButton = "{\"id\":\"remote_control\",\"showAsAction\":\"never\"}";
    CString handsupButton = "{\"id\":\"hands_up\",\"showAsAction\":\"never\"}";
    CString changechairmanButton = "{\"id\":\"change_chairman_auth\",\"showAsAction\":\"never\"}";
    CString renameButton = "{\"id\":\"rename\",\"showAsAction\":\"never\"}";
    CString lockconfButton = "{ \"id\":\"lock_conf\",\"showAsAction\":\"never\"}"
    CString chatButton = "{\"id\":\"chat\",\"showAsAction\":\"never\"}";
    CString exportButton = "{\"id\":\"export_participants\",\"showAsAction\":\"never\"}";
    CString accessButton = "{\"id\":\"attendee_access_control\",\"showAsAction\":\"never\"}";
 
    CString buttonEnd = "]";
    CString toolBarEnd = "}";
    CString menuEnd = "}";
    CString end = "}}";
 
    CString customMenu = customMenuStart + customMenu1 + "," + customMenu2 + customMenuEnd;
    CString button = buttonStart + inviateButton + "," + leaveButton + "," \
        + callButton + "," + attendeeButton + "," + shareButton + "," + annotationButton + "," + stopshareButton + ","\
        + feedbackButton + "," + remotecontrolButton + "," + handsupButton + "," + changechairmanButton + "," + renameButton + ","\
        + lockconfButton + "," + chatButton + "," + exportButton  + "," + accessButton + buttonEnd;
 
    CString menu = menuStart + "," + titleBar + toolBarStart + customMenu + "," + button + toolBarEnd + menuEnd;
    CString config = start + name + "," + linkPrefix + "," + isUseExternalConfInfoWnd + "," + isUseExternalAddressBook + "," + menu + end;
    
    //转换成UTF8格式
    string uiConfig = CTools::UNICODE2UTF(config);
    int ret = hwmsdkagent::Config(uiConfig);
    return ret;
}
```
