说明:
本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
QQ 群 号:513683159 【相互学习】
内容来源:
官方的手册(免费获取)Pxx=该手册的对应页码xx
github-awtk
控件说明
关于 spin_box控件(图片控件) 介绍,对应书 P111。(书中还有更详细内容).
一个特殊的数值编辑器,将 edit_t 和 button_t 进行组合,方便编辑数值。
点击向上的按钮将数值增加一个 step,点击向下的按钮将数值减小一个 step。step 的值可以
通过 step 属性进行设置。spin_box_t 是 edit_t 的子类控件,edit_t 的函数均适用于 spin_box_t
控件。
注意:使用该控件的时候需要将awtk\demos\assets\default\raw\images\x1
目录下:arrow_*.png
共 12 张图片复制到自己的应用目录下(如:res\assets\default\raw\images\xx
),否则将不能正常显示。
工程修改
①基于awtk开发实践——学习篇7:创建简单工程(方式二:基于HelloWorld.Xml-Demo工程)
②上篇已添加了图片资源。
spin_box.c
#include "awtk.h"
static ret_t on_changed(void* ctx, event_t* evt) {
widget_t* target = WIDGET(evt->target);
log_debug("%s changed: int value=%d\n", target->name, edit_get_int(target));
log_debug("%s changed: double value=%lf\n", target->name, edit_get_double(target));
return RET_OK;
}
static ret_t on_changing(void* ctx, event_t* evt) {
widget_t* target = WIDGET(evt->target);
log_debug("%s changing: value=%d\n", target->name, edit_get_int(target));
log_debug("%s changing: double value=%lf\n", target->name, edit_get_double(target));
return RET_OK;
}
/* spin_box控件创建函数 */
widget_t* create_spin_box(widget_t* win, input_type_t type, const char* name, const char* text,int x, int y, int w, int h) {
widget_t* spin_box = spin_box_create(win, x, y, w, h); //创建spin_box对象
widget_on(spin_box, EVT_VALUE_CHANGED, on_changed, NULL); //注册指定事件的处理函数
widget_on(spin_box, EVT_VALUE_CHANGING, on_changing, NULL); //注册指定事件的处理函数
widget_set_name(spin_box, name); //设置控件的名称
widget_set_text_utf8(spin_box, text); //设置控件的文本
edit_set_input_tips(spin_box, name); //设置编辑器的输入提示
//等效于edit_set_tips(spin_box, name);
edit_set_input_type(spin_box, type); //设置编辑器的输入类型
return spin_box;
}
ret_t application_init() {
widget_t* spin_box1 = NULL;
widget_t* spin_box2 = NULL;
widget_t* spin_box3 = NULL;
widget_t* spin_box4 = NULL;
widget_t* win = window_create(NULL, 0, 0, 0, 0); //创建window对象
spin_box1 = create_spin_box(win, INPUT_INT, "int", "", 10, 10, 228, 30);
edit_set_int_limit(spin_box1, 1, 100, 1); //设置为整数输入及取值范围。最小1,最大100,步长1
spin_box2 = create_spin_box(win, INPUT_UINT, "uint", "", 10, 50, 228, 30);
edit_set_int_limit(spin_box2, 1, 100, 1); //设置为整数输入及取值范围。最小1,最大100,步长1
edit_set_int(spin_box2, 50); //设置int类型的值=50
spin_box3 = create_spin_box(win, INPUT_FLOAT, "float", "1.23", 10, 90, 228, 30);
edit_set_float_limit(spin_box3, 1, 10, 1); //设置为浮点数输入及取值范围,最小1,最大10,步长1
edit_set_int(spin_box3, 5); //设置int类型的值=5
spin_box4 = create_spin_box(win, INPUT_UFLOAT, "ufloat", "", 10, 10 + 128, 228, 30);
edit_set_float_limit(spin_box4, 1, 10, 0.1); //设置为浮点数输入及取值范围,最小1,最大10,步长0.1
widget_layout(win); //布局当前控件及子控件
return RET_OK;
}
执行过程:
1.生成资源:sh assets_gen.sh
,添加新资源故需重新生成资源。【因为此处并不使用.data文件,故可省略】
2.编译:scons
3.执行:./bin/demo