## window\_base\_t ### 概述 ![image](images/window_base_t_0.png) 窗口。 本类把窗口相关的公共行为进行抽象,放到一起方便重用。目前已知的具体实现如下图: ![image](images/window_base_t_1.png) > 本类是一个抽象类,不能进行实例化。请在应用程序中使用具体的类,如window\_t。 ---------------------------------- ### 函数
| 函数名称 | 说明 | | -------- | ------------ | | window\_base\_auto\_scale\_children | 根据参数自动缩放子控件。 | | window\_base\_cast | 转换为window_base对象(供脚本语言使用)。 | | window\_base\_create | 创建window base对象。 | | window\_base\_get\_prop | 窗口get_prop函数的缺省实现。 | | window\_base\_invalidate | 窗口on_invalidate函数的缺省实现。 | | window\_base\_on\_destroy | 窗口on_destroy函数的缺省实现。 | | window\_base\_on\_event | 窗口on_event函数的缺省实现。 | | window\_base\_on\_paint\_begin | 窗口on_paint_begin函数的缺省实现。 | | window\_base\_on\_paint\_end | 窗口on_paint_end函数的缺省实现。 | | window\_base\_on\_paint\_self | 窗口on_paint_self函数的缺省实现。 | | window\_base\_set\_need\_relayout | 设置是否需要relayout | | window\_base\_set\_prop | 窗口set_prop函数的缺省实现。 | ### 属性
| 属性名称 | 类型 | 说明 | | -------- | ----- | ------------ | | assets\_manager | assets\_manager\_t* | 获取资源管理器对象。 | | auto\_scale\_children\_h | bool\_t | 窗口大小与设计时大小不同时,是否自动调整子控件的高度。 | | auto\_scale\_children\_w | bool\_t | 窗口大小与设计时大小不同时,是否自动调整子控件的宽度。 | | auto\_scale\_children\_x | bool\_t | 窗口大小与设计时大小不同时,是否自动调整子控件的x坐标。 | | auto\_scale\_children\_y | bool\_t | 窗口大小与设计时大小不同时,是否自动调整子控件的y坐标。 | | closable | window\_closable\_t | 收到EVT_REQUEST_CLOSE_WINDOW是否自动关闭窗口。 | | close\_anim\_hint | char* | 关闭窗口动画的名称。 | | design\_h | uint16\_t | 设计时高度。 | | design\_w | uint16\_t | 设计时宽度。 | | disable\_anim | bool\_t | 禁用窗口动画。 | | font\_manager | font\_manager\_t* | 获取字体管理器对象。 | | image\_manager | image\_manager\_t* | 获取图片管理器对象。 | | move\_focus\_down\_key | char* | 向下移动焦点的键值。 | | move\_focus\_left\_key | char* | 向左移动焦点的键值。 | | move\_focus\_next\_key | char* | 向后移动焦点的键值。 | | move\_focus\_prev\_key | char* | 向前移动焦点的键值。 | | move\_focus\_right\_key | char* | 向右移动焦点的键值。 | | move\_focus\_up\_key | char* | 向上移动焦点的键值。 | | open\_anim\_hint | char* | 打开窗口动画的名称。 | | single\_instance | bool\_t | 单例。如果窗口存在,先关闭再打开。 | | stage | char* | 窗口当前处于的状态。 | | strongly\_focus | bool\_t | 点击非focusable控件时,是否让当前焦点控件失去焦点。比如点击窗口空白区域,是否让编辑器失去焦点。 | | theme | char* | 窗体样式资源的名称。 | | theme\_obj | theme\_t* | 窗口的常量窗体样式数据。 | ### 事件
| 事件名称 | 类型 | 说明 | | -------- | ----- | ------- | | EVT\_WINDOW\_WILL\_OPEN | event\_t | 窗口即将打开事件。 如果有窗口动画,在窗口动画开始前触发。如果没有窗口动画,在窗口被加载后的下一次循环中触发。 | | EVT\_WINDOW\_OPEN | event\_t | 窗口打开事件。 如果有窗口动画,在窗口动画完成时触发。如果没有窗口动画,在窗口被加载后的下一次循环中触发。 | | EVT\_WINDOW\_TO\_BACKGROUND | event\_t | 窗口被切换到后台事件。 打开新窗口时,当前窗口被切换到后台时,对当前窗口触发本事件。 | | EVT\_WINDOW\_TO\_FOREGROUND | event\_t | 窗口被切换到前台事件。 关闭当前窗口时,前一个窗口被切换到前台时,对前一个窗口触发本事件。 | | EVT\_WINDOW\_CLOSE | event\_t | 窗口关闭事件。 | | EVT\_WINDOW\_LOAD | event\_t | 窗口加载完成事件。 | | EVT\_REQUEST\_CLOSE\_WINDOW | event\_t | 请求关闭窗口的事件。 | | EVT\_LOCALE\_CHANGED | event\_t | locale改变的事件。 | #### window\_base\_auto\_scale\_children 函数 ----------------------- * 函数功能: >
根据参数自动缩放子控件。 * 函数原型: ``` ret_t window_base_auto_scale_children (widget_t* widget); ``` * 参数说明: | 参数 | 类型 | 说明 | | -------- | ----- | --------- | | 返回值 | ret\_t | 返回RET\_OK表示成功,否则表示失败。 | | widget | widget\_t* | window\_base对象。 | #### window\_base\_cast 函数 ----------------------- * 函数功能: >
转换为window_base对象(供脚本语言使用)。 * 函数原型: ``` widget_t* window_base_cast (widget_t* widget); ``` * 参数说明: | 参数 | 类型 | 说明 | | -------- | ----- | --------- | | 返回值 | widget\_t* | window\_base对象。 | | widget | widget\_t* | window\_base对象。 | #### window\_base\_create 函数 ----------------------- * 函数功能: >
创建window base对象。 * 函数原型: ``` widget_t* window_base_create (widget_t* parent, const widget_vtable_t* vt, xy_t x, xy_t y, wh_t w, wh_t h); ``` * 参数说明: | 参数 | 类型 | 说明 | | -------- | ----- | --------- | | 返回值 | widget\_t* | 窗口对象。 | | parent | widget\_t* | 父控件 | | vt | const widget\_vtable\_t* | vtable对象。 | | x | xy\_t | x坐标 | | y | xy\_t | y坐标 | | w | wh\_t | 宽度 | | h | wh\_t | 高度 | #### window\_base\_get\_prop 函数 ----------------------- * 函数功能: >
窗口get_prop函数的缺省实现。 * 函数原型: ``` ret_t window_base_get_prop (widget_t* widget, const char* name, value_t* v); ``` * 参数说明: | 参数 | 类型 | 说明 | | -------- | ----- | --------- | | 返回值 | ret\_t | 返回RET\_OK表示成功,否则表示失败。。 | | widget | widget\_t* | window\_base对象。g | | name | const char* | 属性名。 | | v | value\_t* | value对象 | #### window\_base\_invalidate 函数 ----------------------- * 函数功能: >
窗口on_invalidate函数的缺省实现。 * 函数原型: ``` ret_t window_base_invalidate (widget_t* widget, const rect_t* rect); ``` * 参数说明: | 参数 | 类型 | 说明 | | -------- | ----- | --------- | | 返回值 | ret\_t | 返回RET\_OK表示成功,否则表示失败。 | | widget | widget\_t* | window\_base对象。 | | rect | const rect\_t* | rect对象。 | #### window\_base\_on\_destroy 函数 ----------------------- * 函数功能: >
窗口on_destroy函数的缺省实现。 * 函数原型: ``` ret_t window_base_on_destroy (widget_t* widget); ``` * 参数说明: | 参数 | 类型 | 说明 | | -------- | ----- | --------- | | 返回值 | ret\_t | 返回RET\_OK表示成功,否则表示失败。 | | widget | widget\_t* | window\_base对象。 | #### window\_base\_on\_event 函数 ----------------------- * 函数功能: >
窗口on_event函数的缺省实现。 * 函数原型: ``` ret_t window_base_on_event (widget_t* widget, event_t* e); ``` * 参数说明: | 参数 | 类型 | 说明 | | -------- | ----- | --------- | | 返回值 | ret\_t | 返回RET\_OK表示成功,否则表示失败。 | | widget | widget\_t* | window\_base对象。 | | e | event\_t* | event对象。 | #### window\_base\_on\_paint\_begin 函数 ----------------------- * 函数功能: >
窗口on_paint_begin函数的缺省实现。 * 函数原型: ``` ret_t window_base_on_paint_begin (widget_t* widget, canvas_t* c); ``` * 参数说明: | 参数 | 类型 | 说明 | | -------- | ----- | --------- | | 返回值 | ret\_t | 返回RET\_OK表示成功,否则表示失败。 | | widget | widget\_t* | window\_base对象。 | | c | canvas\_t* | canvas对象。 | #### window\_base\_on\_paint\_end 函数 ----------------------- * 函数功能: >
窗口on_paint_end函数的缺省实现。 * 函数原型: ``` ret_t window_base_on_paint_end (widget_t* widget, canvas_t* c); ``` * 参数说明: | 参数 | 类型 | 说明 | | -------- | ----- | --------- | | 返回值 | ret\_t | 返回RET\_OK表示成功,否则表示失败。1 | | widget | widget\_t* | window\_base对象。 | | c | canvas\_t* | canvas对象。 | #### window\_base\_on\_paint\_self 函数 ----------------------- * 函数功能: >
窗口on_paint_self函数的缺省实现。 * 函数原型: ``` ret_t window_base_on_paint_self (widget_t* widget, canvas_t* c); ``` * 参数说明: | 参数 | 类型 | 说明 | | -------- | ----- | --------- | | 返回值 | ret\_t | 返回RET\_OK表示成功,否则表示失败。 | | widget | widget\_t* | window\_base对象。 | | c | canvas\_t* | canvas对象。 | #### window\_base\_set\_need\_relayout 函数 ----------------------- * 函数功能: >
设置是否需要relayout * 函数原型: ``` ret_t window_base_set_need_relayout (widget_t* widget, bool_t ); ``` * 参数说明: | 参数 | 类型 | 说明 | | -------- | ----- | --------- | | 返回值 | ret\_t | 返回RET\_OK表示成功,否则表示失败。。 | | widget | widget\_t* | window\_base对象。 | | | bool\_t | t | #### window\_base\_set\_prop 函数 ----------------------- * 函数功能: >
窗口set_prop函数的缺省实现。 * 函数原型: ``` ret_t window_base_set_prop (widget_t* widget, const char* name, const value_t* v); ``` * 参数说明: | 参数 | 类型 | 说明 | | -------- | ----- | --------- | | 返回值 | ret\_t | 返回RET\_OK表示成功,否则表示失败。 | | widget | widget\_t* | window\_base对象。 | | name | const char* | 属性名。 | | v | const value\_t* | value对象 | #### assets\_manager 属性 ----------------------- >
获取资源管理器对象。 > 把资源管理器对象与窗口关联起来,是为了解决UI设计器与被设计的窗口需要从不同的位置加载资源资源的问题。 * 类型:assets\_manager\_t* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 否 | | 可直接修改 | 否 | | 可通过widget\_get\_prop读取 | 是 | #### auto\_scale\_children\_h 属性 ----------------------- >
窗口大小与设计时大小不同时,是否自动调整子控件的高度。 * 类型:bool\_t | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### auto\_scale\_children\_w 属性 ----------------------- >
窗口大小与设计时大小不同时,是否自动调整子控件的宽度。 * 类型:bool\_t | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### auto\_scale\_children\_x 属性 ----------------------- >
窗口大小与设计时大小不同时,是否自动调整子控件的x坐标。 * 类型:bool\_t | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### auto\_scale\_children\_y 属性 ----------------------- >
窗口大小与设计时大小不同时,是否自动调整子控件的y坐标。 * 类型:bool\_t | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### closable 属性 ----------------------- >
收到EVT_REQUEST_CLOSE_WINDOW是否自动关闭窗口。 如果关闭窗口时,需要用户确认: * 1.将closable设置为WINDOW\_CLOSABLE\_CONFIRM * 2.处理窗口的EVT\_REQUEST\_CLOSE\_WINDOW事件 > closable在XML中取值为:yes/no/confirm,缺省为yes。 * 类型:window\_closable\_t | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### close\_anim\_hint 属性 ----------------------- >
关闭窗口动画的名称。 请参考[窗口动画](https://github.com/zlgopen/awtk/blob/master/docs/window_animator.md) * 类型:char* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### design\_h 属性 ----------------------- >
设计时高度。 * 类型:uint16\_t | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### design\_w 属性 ----------------------- >
设计时宽度。 * 类型:uint16\_t | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### disable\_anim 属性 ----------------------- >
禁用窗口动画。 * 类型:bool\_t | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### font\_manager 属性 ----------------------- >
获取字体管理器对象。 > 把字体管理器对象与窗口关联起来,是为了解决UI设计器与被设计的窗口需要从不同的位置加载字体资源的问题。 * 类型:font\_manager\_t* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 否 | | 可直接修改 | 否 | | 可通过widget\_get\_prop读取 | 是 | #### image\_manager 属性 ----------------------- >
获取图片管理器对象。 > 把图片管理器对象与窗口关联起来,是为了解决UI设计器与被设计的窗口需要从不同的位置加载图片资源的问题。 * 类型:image\_manager\_t* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 否 | | 可直接修改 | 否 | | 可通过widget\_get\_prop读取 | 是 | #### move\_focus\_down\_key 属性 ----------------------- >
向下移动焦点的键值。 请参考[控件焦点](https://github.com/zlgopen/awtk/blob/master/docs/widget_focus.md) * 类型:char* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### move\_focus\_left\_key 属性 ----------------------- >
向左移动焦点的键值。 请参考[控件焦点](https://github.com/zlgopen/awtk/blob/master/docs/widget_focus.md) * 类型:char* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### move\_focus\_next\_key 属性 ----------------------- >
向后移动焦点的键值。 请参考[控件焦点](https://github.com/zlgopen/awtk/blob/master/docs/widget_focus.md) * 类型:char* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### move\_focus\_prev\_key 属性 ----------------------- >
向前移动焦点的键值。 请参考[控件焦点](https://github.com/zlgopen/awtk/blob/master/docs/widget_focus.md) * 类型:char* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### move\_focus\_right\_key 属性 ----------------------- >
向右移动焦点的键值。 请参考[控件焦点](https://github.com/zlgopen/awtk/blob/master/docs/widget_focus.md) * 类型:char* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### move\_focus\_up\_key 属性 ----------------------- >
向上移动焦点的键值。 请参考[控件焦点](https://github.com/zlgopen/awtk/blob/master/docs/widget_focus.md) * 类型:char* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### open\_anim\_hint 属性 ----------------------- >
打开窗口动画的名称。 请参考[窗口动画](https://github.com/zlgopen/awtk/blob/master/docs/window_animator.md) * 类型:char* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### single\_instance 属性 ----------------------- >
单例。如果窗口存在,先关闭再打开。 * 类型:bool\_t | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### stage 属性 ----------------------- >
窗口当前处于的状态。 * 类型:char* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可通过widget\_get\_prop读取 | 是 | #### strongly\_focus 属性 ----------------------- >
点击非focusable控件时,是否让当前焦点控件失去焦点。比如点击窗口空白区域,是否让编辑器失去焦点。 * 类型:bool\_t | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### theme 属性 ----------------------- >
窗体样式资源的名称。 每个窗口都可以有独立的窗体样式文件,如果没指定,则使用系统缺省的窗体样式文件。 窗体样式是一个XML文件,放在assets/raw/styles目录下。 请参考[窗体样式](https://github.com/zlgopen/awtk/blob/master/docs/theme.md) * 类型:char* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 是 | | 可直接修改 | 否 | | 可持久化 | 是 | | 可脚本化 | 是 | | 可在IDE中设置 | 是 | | 可在XML中设置 | 是 | | 可通过widget\_get\_prop读取 | 是 | | 可通过widget\_set\_prop修改 | 是 | #### theme\_obj 属性 ----------------------- >
窗口的常量窗体样式数据。 > 把窗体样式管理器对象与窗口关联起来,是为了解决UI设计器与被设计的窗口需要从不同的位置加载窗体样式资源的问题。 * 类型:theme\_t* | 特性 | 是否支持 | | -------- | ----- | | 可直接读取 | 否 | | 可直接修改 | 否 | | 可通过widget\_get\_prop读取 | 是 |