//1.定义宏:对应系统默认键盘上的一些控制键
#define SYMBOL_BACKSPACE "\xEF\x95\x9A" //退格
#define SYMBOL_CLOSE "\xEF\x80\x8D" //关闭
#define SYMBOL_OK "\xEF\x80\x8C" //确认
//其他本例中未用到的特殊键
#define SYMBOL_NEWLINE "\xEF\xA2\xA2"//换行
#define SYMBOL_HOME "\xEF\x80\x95" //HOME
#define SYMBOL_RIGHT "\xEF\x81\x94" //向右
#define SYMBOL_LEFT "\xEF\x81\x93" //向左
#define SYMBOL_KEYBOARD "\xEF\x84\x9C" //输入法选择
//2.定义新的键盘布局
static const char* keymap[] = {
"1","2","3",SYMBOL_BACKSPACE,"\n"//这几个键默认处理即可
, "4","5","6",SYMBOL_NEWLINE,"\n"//这几个键默认处理即可
, "7","8","9","space","\n"//space要特殊处理,输入时要换成" "
, "-","0","#FF0000 Cancel","#00FF00 OK",""//"#FF0000 Cancel"取消输入,"#00FF00 OK"确认输入
};
//3.定义新的键盘按键属性
/**定义键盘按钮属性表
* 0x1 - 0x7 表示控件宽度(如本行四个按钮的宽度分别为:1,2,3,1,故总宽为7。那么第1个按钮宽度为总宽的1/7,第2个为2/7,第3个为3/7,第4个为1/7)
* 0x8 表示隐藏
* 0x10 按住时不重复输入
* 0x20 禁用
* 0x40 为开关按钮(点一下进入按下状态、再点一下进入弹起状态)
* 0x80 当前为按下状态
* 0x100 点击时发出值变化事件(默认为按下时发出值变化事件)
* 0x200 显示提示气泡
* 0x1000 文字重着色,如文字设为红色"#FF0000 Cancel"
* */
static uint16_t ctrlmap[] = {
1,1,1,1|0x0080
,1,1,1,1|0x0080
,1,1,1,1|0x0080
,1|0x0080,1,1|0x0080|0x1000,1|0x0080|0x1000
};
//效果图
//4.定义键盘处理函数
static bool func_customerkey(const char* txt) {
if(strcmp(txt,"space")==0) {
cout<<"todo yourself handler"<<endl;
return true;//返回true,则不再做内置功能(往文本框增加按键值)
}
return false;//返回false,则会调用默认的往文本框中增加内容
}
//5.加载时配置键盘布局及样式
void Frm19::onLoad() {
//关闭单行模式,即启用多行模式
wMText3->setOneLine(false);
//为文件框添加长按事件
wMText3->addEventCB(myfunc, stt::constant::Event::LONG_PRESSED, wMText3);//将文本框控件自身作为参数传入回调函数
//5.1.设为布局修改模式
wMText3->setImeMode(8);
//5.2.设置键盘按钮表
STTTextArea::setCustomKey(keymap);
//5.3.设置键盘按钮属性表
STTTextArea::setCustomKeyCtrl(ctrlmap);
//5.4.设置自定义键盘处理函数
STTTextArea::setCustomKeyHandler(func_customerkey);
//5.5.设置特殊键
STTTextArea::setCustomSpecialKey("space"," ",0);//"space"键转换为" "
STTTextArea::setCustomSpecialKey("#FF0000 Cancel",SYMBOL_CLOSE,1);//"#FF0000 Cancel"键转换为SYMBOL_CLOSE
STTTextArea::setCustomSpecialKey("#00FF00 OK",SYMBOL_OK,2);//"#00FF00 OK"键转换为SYMBOL_OK
}
示例工程:git clone https://gitee.com/clawclaw/sttkeyboard.git