
本篇文章將借助一個檢測按鍵的demo程序來介紹如何綁定物理按鍵并響應,該demo最終效果是按下任意物理按鍵時會顯示該按鍵key down,松開按鍵時會顯示該按鍵key up。
?

圖?2?使用AWTK Designer設計界面
navigator_global_widget_on(EVT_KEY_DOWN, on_global_key_down, win);navigator_global_widget_on(EVT_KEY_UP, on_global_key_up, win);
static ret_t on_global_key_down(void* ctx, event_t* e) { // 按鍵按下?char ch[50] = {0};?widget_t* win = WIDGET(ctx);?key_event_t* evt = key_event_cast(e);?widget_t* label = widget_lookup(win, "label", TRUE);?const key_type_value_t* ktv = keys_type_find_by_value(evt->key);?if (ktv == NULL || label == NULL || ktv->name == NULL) {? ?return RET_BAD_PARAMS;?}?/* ktv->name為custom_keys.json綁定鍵值對應的名稱 */?tk_snprintf(ch, sizeof(ch), "%s key down", ktv->name);?widget_set_text_utf8(label, ch);?return RET_OK;}static ret_t on_global_key_up(void* ctx, event_t* e) { // 按鍵抬起?char ch[50] = {0};?widget_t* win = WIDGET(ctx);?key_event_t* evt = key_event_cast(e);?widget_t* label = widget_lookup(win, "label", TRUE);?const key_type_value_t* ktv = keys_type_find_by_value(evt->key);?if (ktv == NULL || label == NULL || ktv->name == NULL) {? ?return RET_BAD_PARAMS;?}?/* ktv->name為custom_keys.json綁定鍵值對應的名稱 */?tk_snprintf(ch, sizeof(ch), "%s key up", ktv->name);?widget_set_text_utf8(label, ch);?return RET_OK;}
{? ?"START" : {? ? ? ?"value" : 290? ?},? ?"F1" : {? ? ? ?"value" : 279? ?}}

/* awtk-stm32f103ze-raw/awtk-port/main_loop_stm32_raw.c */void dispatch_input_events(void) {?int key = KEY_Scan(0);?switch (key) {?case KEY_UP: {? ?key = TK_KEY_UP;? ?break;?}?case KEY_DOWN: {? ?key = TK_KEY_DOWN;? ?break;?}?default: { key = 0; }?}?if (key) {? ?main_loop_post_key_event(main_loop(), TRUE, key);?} else {? ?main_loop_post_key_event(main_loop(), FALSE, key);?}}

??技術交流群
更多往期文章,請點擊“?閱讀原文?”。






