其他分享
首页 > 其他分享> > awtk开发实践——学习篇8:button示例(按键控件)

awtk开发实践——学习篇8:button示例(按键控件)

作者:互联网

说明
  本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
  QQ 群 号:513683159 【相互学习】
内容来源
  官方的手册(免费获取)Pxx=该手册的对应页码xx
  github-awtk

说明

  awtk开发实践——学习篇7:创建简单工程(方式二:基于HelloWorld.Xml-Demo工程)
  按照上篇创建工程,只需将label.c文件替换为bubble.c文件。
  修改一下可执行文件名即可。

button.c

#include "awtk.h"

static ret_t on_click(void* ctx, event_t* e) {
  widget_t* button = WIDGET(e->target);
  log_debug("on_click: %s\n", button->name);
  return RET_OK;
}

static ret_t on_long_press(void* ctx, event_t* e) {
  widget_t* button = WIDGET(e->target);
  log_debug("on_long_press: %s\n", button->name);
  return RET_OK;
}

static ret_t on_pointer_leave(void* ctx, event_t* e) {
  widget_t* button = WIDGET(e->target);
  log_debug("on_pointer_leave: %s\n", button->name);
  return RET_OK;
}

static ret_t on_pointer_up(void* ctx, event_t* e) {
  widget_t* button = WIDGET(e->target);
  log_debug("on_pointer_up: %s\n", button->name);
  return RET_OK;
}

ret_t application_init() {
  widget_t* win = window_create(NULL, 0, 0, 0, 0);				//创建window对象
  widget_t* ok = button_create(win, 0, 0, 0, 0);				//创建button对象

  locale_info_change(locale_info(), "zh", "CN");				//设置当前的国家和语言。默认为:"en", "US"

  widget_set_name(ok, "ok");									//设置控件的名称:ok
  widget_set_tr_text(ok, "ok");									//获取翻译之后的文本,然后调用widget_set_text
  button_set_enable_long_press(ok, TRUE);						//设置是否启用长按事件
  button_set_long_press_time(ok, 1000);							//设置触发长按事件的时间:1000毫秒
  widget_set_self_layout_params(ok, "center", "middle", "50%", "30");//设置控件自己的布局(缺省布局器)参数(过时,请用widget_set_self_layout)。
// 等同于:widget_set_self_layout(ok, "default(x=center, y=middle, w=50%, h=30)");
  widget_on(ok, EVT_CLICK, on_click, NULL);						//注册指定事件的处理函数
  widget_on(ok, EVT_LONG_PRESS, on_long_press, NULL);			//注册指定事件的处理函数
  widget_on(ok, EVT_POINTER_LEAVE, on_pointer_leave, NULL);		//注册指定事件的处理函数
  widget_on(ok, EVT_POINTER_UP, on_pointer_up, NULL);			//注册指定事件的处理函数

  widget_layout(win);											//布局当前控件及子控件

  return RET_OK;
}

该示例注册4种触发事件:
  ①EVT_CLICK:点击事件名(pointer_event_t)。
    点击按键触发,输出:on_click: ok
  ②EVT_LONG_PRESS:长按事件名(pointer_event_t)。
    长按按键1s触发,输出:on_long_press: ok
  ③EVT_POINTER_LEAVE:指针离开事件名(pointer_event_t)。
    鼠标从按键上离开触发:输出:on_pointer_leave: ok
  ④EVT_POINTER_UP:指针抬起事件名(pointer_event_t)。
    鼠标按下按键抬起瞬间触发,输出:on_pointer_up: ok

执行过程:

  1.生成资源:sh assets_gen.sh,与上一项目相同(无更改),故此处可省略。
  2.编译:scons
  3.执行:./bin/demo

实现效果:

在这里插入图片描述

标签:控件,widget,set,ok,示例,EVT,button,pointer
来源: https://blog.csdn.net/weixin_42645653/article/details/120813952