当前位置: 首页 > news >正文

emWin自定义键盘布局

        emWin V6.46提供了自带的键盘控件,用起来功能还是比较齐全的。但是有些时候自带的布局不能满足要求,此时可用键盘的结构体来自定义布局。

KEYDEF_KEYBOARD MyNumPad;

static KEYDEF_AREA NumPadKeyArea[4] =
{
    {10, 0,   720, 250}, //每行按钮的坐标和占用区域 多个按键平均分配宽度
    {10, 250, 720, 250}, //所有坐标值均以1000为参考值,和分辨率无关
    {10, 500, 720, 250},
    {10, 750, 480, 250},
};
static KEYBOARD_CODES NumPadKeyCode[4] =  //各行的按钮数量和按钮对应字符
{
    {3, (u16 *)"\x31\x00\x32\x00\x33\x00"}, // '1' '2' '3' 
    {3, (u16 *)"\x34\x00\x35\x00\x36\x00"}, // '4' '5' '6'
    {3, (u16 *)"\x37\x00\x38\x00\x39\x00"}, // '7' '8' '9'
    {2, (u16 *)"\x2E\x00\x30\x00"},         // '.' '0'
};

static KEYDEF_LINE NumPadKeyDef[4];
static KEYDEF_LINE *pNumPadKey[4];

// 以上是用行列的方式定义按钮,每个按钮对应显示1个字符,即按下后的输入内容


//以下是独立按键,是用button方式实现的,可以显示字符串,结构体中有5个独立按键,可单独定义坐标、大小和按下后的输入内容
static KEYDEF_KEY NumPadKeyEnter = {{750, 750, 250, 250}, GUI_KEY_ENTER,  {"确定"}}; //确定键
static KEYDEF_KEY NumPadKeyEsc =   {{750, 500, 250, 250}, GUI_KEY_ESCAPE, {"取消"}}; //取消键
static KEYDEF_KEY NumPadKeyBksp =  {{490, 750, 240, 250}, GUI_KEY_BACKSPACE, {"删除"}}; //删除键

void NumPadLayoutInit(void)
{
    u8 i = 0;

    for(i=0; i<4; i++) // 共4行,每行3个按钮
    {
        NumPadKeyDef[i].Area = NumPadKeyArea[i];
        NumPadKeyDef[i].Codes = NumPadKeyCode[i];
        pNumPadKey[i] = &NumPadKeyDef[i];
    }

    MyNumPad.pDefEnter = &NumPadKeyEnter; //单独定义按键和位置
    MyNumPad.pDefSpace = &NumPadKeyEsc;
    MyNumPad.pDefBackspace = &NumPadKeyBksp;
    MyNumPad.NumFixedLines = 4; //指定按钮阵列
    MyNumPad.ppLineFixed = pNumPadKey;
}


调用:

    NumPadLayoutInit();
    hWin = WM_GetDialogItem(pMsg->hWin, GUI_ID_KEYBOARD0);
    KEYBOARD_SetLayout(hWin, &MyNumPad);

        注意,如果编译不通过,需要手动更改KEYBOARD结构体的定义,删除const,使指针能够使用非静态变量。

具体显示效果如下:

相关文章:

  • 实验一、Linux环境下实现进度条小程序:深入解析核心实现与关键技术细节
  • 英伟达有哪些支持AI绘画的 工程
  • VMWare虚拟机磁盘扩容
  • Dify 0.15.3 输入变量无法被重新赋值问题-解决方法
  • 用selenium+ChromeDriver豆瓣电影 肖申克的救赎 短评爬取(pycharm 爬虫)
  • 基于CNN-LSTM联合网络的主瓣干扰辨识
  • 三个HTTP请求参数注解@RequestHeader、@RequestParam和@RequestBody的使用对比
  • 神聖的綫性代數速成例題21. 酉空間的基本概念、酉變換與酉矩陣的性質及應用、矩陣的奇異值分解及其應用
  • Eclipse Debug 调试
  • 【C++】STL库_list 的模拟实现
  • 三个print优雅打印datetime模块的“时间密码”
  • 笔试专题(二)
  • Rust函数、条件语句、循环
  • 动态查找表
  • 1.2 编译器结构
  • 把 ASP.NET Core 服务(BigDogServer)部署到 Linux 并作为服务运行
  • 一文读懂 GPT 与 BERT:预训练逻辑及差异剖析
  • 缓存过期时间之逻辑过期
  • 蓝桥备赛(25)算法篇【差分】
  • word文件转换为Markdown格式
  • 巴防长称中俄可参与克什米尔恐袭事件国际调查,外交部回应
  • 纪录电影《中国有戏:天幕计划》启动,有望太空播放
  • 大学2025丨专访南开人工智能学院院长赵新:人工智能未来会变成通识类课程
  • 合肥一季度GDP为3003.88亿元,同比增长6.6%
  • 王一博赛车故障退赛冲上热搜,工作室回应:下次再战
  • 湖南小伙“朱雀玄武敕令”提交申请改名为“朱咸宁”