|
发表于 2021-5-26 14:44:49
|
显示全部楼层
text_input输入内容的函数:gx_single_line_text_input_text_set
gx_single_line_text_input_character_insert
gx_single_line_text_input_backspace
获取内容可以用以下代码:
strncpy((char *)input_buf,
window_keyboard_numeric.window_keyboard_numeric_text_input.gx_single_line_text_input_buffer,
window_keyboard_numeric.window_keyboard_numeric_text_input.gx_single_line_text_input_string_size + 1);
其中window_keyboard_numeric 是页面名称, window_keyboard_numeric_text_input是 text_input 控件名称。
我实现了一个数字键盘模块,设计界面如下:

代码如下:
#include <string.h>
#include "gx_api.h"
#include "guiapp_resources.h"
#include "guiapp_specifications.h"
typedef struct
{
GX_CHAR *text;
INT x_offset;
INT y_offset;
USHORT widget_id;
USHORT event_type;
LONG type;
} KEY_INFO;
static const KEY_INFO key_info[] =
{
{"0", 0, 0, ID_CHAR_0, GX_SIGNAL(ID_CHAR_0, GX_EVENT_CLICKED), 0},
{"1", 0, 0, ID_CHAR_1, GX_SIGNAL(ID_CHAR_1, GX_EVENT_CLICKED), 0},
{"2", 0, 0, ID_CHAR_2, GX_SIGNAL(ID_CHAR_2, GX_EVENT_CLICKED), 0},
{"3", 0, 0, ID_CHAR_3, GX_SIGNAL(ID_CHAR_3, GX_EVENT_CLICKED), 0},
{"4", 0, 0, ID_CHAR_4, GX_SIGNAL(ID_CHAR_4, GX_EVENT_CLICKED), 0},
{"5", 0, 0, ID_CHAR_5, GX_SIGNAL(ID_CHAR_5, GX_EVENT_CLICKED), 0},
{"6", 0, 0, ID_CHAR_6, GX_SIGNAL(ID_CHAR_6, GX_EVENT_CLICKED), 0},
{"7", 0, 0, ID_CHAR_7, GX_SIGNAL(ID_CHAR_7, GX_EVENT_CLICKED), 0},
{"8", 0, 0, ID_CHAR_8, GX_SIGNAL(ID_CHAR_8, GX_EVENT_CLICKED), 0},
{"9", 0, 0, ID_CHAR_9, GX_SIGNAL(ID_CHAR_9, GX_EVENT_CLICKED), 0},
};
static UCHAR *input_buf = 0;
VOID keyboard_numeric_char_draw(GX_PIXELMAP_BUTTON *widget)
{
const KEY_INFO *pKeyInfo = key_info;
GX_STRING text;
gx_pixelmap_button_draw(widget);
while (pKeyInfo->text[0])
{
if (pKeyInfo->widget_id == widget->gx_widget_id)
{
text.gx_string_ptr = pKeyInfo->text;
text.gx_string_length = strlen(pKeyInfo->text);
gx_widget_text_draw_ext(widget, GX_COLOR_ID_TEXT,
GX_FONT_ID_FONT24, &text,
pKeyInfo->x_offset, pKeyInfo->y_offset);
break;
}
pKeyInfo++;
}
}
UCHAR window_keyboard_numeric_execute(GX_WINDOW *parent, UCHAR *buf)
{
ULONG ret = 0;
if ((parent == 0) || (buf == 0))
{
return 0;
}
// 保存输入输出缓存
input_buf = buf;
// 绑定窗口到指定父窗口
gx_widget_attach(parent, &window_keyboard_numeric);
// 设置输入框的初始内容
gx_single_line_text_input_text_set(&window_keyboard_numeric.window_keyboard_numeric_text_input, (GX_CHAR *)buf);
// 显示
gx_window_execute((GX_WINDOW *)&window_keyboard_numeric, &ret);
if (ret == ID_BTN_OK)
{
return 1;
}
return 0;
}
static void btn_char_callback(USHORT id)
{
const KEY_INFO *pKeyInfo = key_info;
GX_SINGLE_LINE_TEXT_INPUT *input = &window_keyboard_numeric.window_keyboard_numeric_text_input;
while (pKeyInfo->text)
{
if (pKeyInfo->widget_id == id)
{
gx_single_line_text_input_character_insert(input, (GX_UBYTE *)pKeyInfo->text, 1);
break;
}
pKeyInfo++;
}
}
UINT keyboard_numeric_event_handler(GX_WINDOW *widget, GX_EVENT *event_ptr)
{
switch (event_ptr->gx_event_type)
{
/* 按钮单击事件*/
case GX_SIGNAL(ID_BTN_BACKSPACE, GX_EVENT_CLICKED):
gx_single_line_text_input_backspace(&window_keyboard_numeric.window_keyboard_numeric_text_input);
break;
case GX_SIGNAL(ID_BTN_OK, GX_EVENT_CLICKED):
if (input_buf)
{
strncpy((char *)input_buf,
window_keyboard_numeric.window_keyboard_numeric_text_input.gx_single_line_text_input_buffer,
window_keyboard_numeric.window_keyboard_numeric_text_input.gx_single_line_text_input_string_size + 1);
}
case GX_SIGNAL(ID_BTN_CLOSE, GX_EVENT_CLICKED):
return event_ptr->gx_event_sender;
//break;
/* 中文选择按键单击事件 */
case GX_SIGNAL(ID_CHAR_0, GX_EVENT_CLICKED):
case GX_SIGNAL(ID_CHAR_1, GX_EVENT_CLICKED):
case GX_SIGNAL(ID_CHAR_2, GX_EVENT_CLICKED):
case GX_SIGNAL(ID_CHAR_3, GX_EVENT_CLICKED):
case GX_SIGNAL(ID_CHAR_4, GX_EVENT_CLICKED):
case GX_SIGNAL(ID_CHAR_5, GX_EVENT_CLICKED):
case GX_SIGNAL(ID_CHAR_6, GX_EVENT_CLICKED):
case GX_SIGNAL(ID_CHAR_7, GX_EVENT_CLICKED):
case GX_SIGNAL(ID_CHAR_8, GX_EVENT_CLICKED):
case GX_SIGNAL(ID_CHAR_9, GX_EVENT_CLICKED):
btn_char_callback(event_ptr->gx_event_sender);
break;
default:
break;
}
return gx_window_event_process(widget, event_ptr);
}
|
|