分享一个emWin软键盘控件

[复制链接]

本帖最后由 glcd 于 2016-6-27 16:30 编辑

花了两天时间做了个emWin软键盘控件,并命名为ButtonSKB控件:

image001.png (20.29 KB, 下载次数: 0)

2016-6-27 16:19 上传

前言:

(1)ButtonSKB已经是1个控件,即可以像使用Button控件一样使用ButtonSKB。

(2)ButtonSKB是由Button控件修改而来(通过skinning方式),其实是在1个大的按键里面”绘制”出多个小按键(注意是”绘制”,而不是”创建”),即ButtonSKB实际上是1个按键,只是把这个按键的绘图函数改了,改成我们自己的绘图函数并绘制出多个小按键,为什么这么做?请继续看…

(3)我相信大家现在用软键盘的方法都是创建几十个Button控件组成一个键盘,这样带来两个问题:1.占用大量SRAM(50个Button将消耗8Kbytes内存),2.管理麻烦(比如移动、隐藏、禁用等等)

(4)既然ButtonSKB是1个Button控件,那么所有Button的APP函数都适用ButtonSKB;只是要修改里面的小按键的属性怎么办?只能通过修改上面所说的绘图函数。

(5)论坛高手那么多,谁能把ButtonSKB演变成中文输入法控件?但是不能占用太多SRAM,在此谢过!

ButtonSKB使用方法:

(1)用GUIbuilder创建一个WINDOW窗体并放置Button控件,然后另存为WindowDLG.c;当然你可以设计任何形式的软键盘,只是别忘了一定是WINDOW+Button组成:

image003.png (36.47 KB, 下载次数: 0)

2016-6-27 16:19 上传

(2)复制WindowDLG.c下面的ID定义和控件结构体到SKIN_buttonSKB.c文件(代替原来的):

#define ID_WINDOW_0  (GUI_ID_USER + 0x00)

#define ID_BUTTON_0  (GUI_ID_USER + 0x02)

#define ID_BUTTON_1  (GUI_ID_USER + 0x03)

….

#define ID_BUTTON_18  (GUI_ID_USER + 0x14)

#define ID_BUTTON_19  (GUI_ID_USER + 0x15)

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {

{ WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 151, 207, 0, 0x0, 0 },

{ BUTTON_CreateIndirect, "Ent", ID_BUTTON_0, 113, 168, 31, 31, 0, 0x0, 0 },

{ BUTTON_CreateIndirect, ".", ID_BUTTON_1, 78, 168, 31, 31, 0, 0x0, 0 },

{ BUTTON_CreateIndirect, ",", ID_BUTTON_2, 43, 168, 31, 31, 0, 0x0, 0 },

{ BUTTON_CreateIndirect, "0", ID_BUTTON_3, 7, 168, 31, 31, 0, 0x0, 0 },

….

{ BUTTON_CreateIndirect, "/", ID_BUTTON_17, 78, 17, 31, 31, 0, 0x0, 0 },

{ BUTTON_CreateIndirect, "=", ID_BUTTON_18, 43, 17, 31, 32, 0, 0x0, 0 },

{ BUTTON_CreateIndirect, "Del", ID_BUTTON_19, 6, 17, 31, 31, 0, 0x0, 0 },

};

(3)经过上面2个步骤,buttonSKB控件已经修改完成,怎么调用使用它?当然是把它当做一个Button按键控件来使用:

static const GUI_WIDGET_CREATE_INFO _aDialogCreateSKB[] = {{ FRAMEWIN_CreateIndirect, "  neqee.com", ID_FRAMEWIN_0, 40, 25, 161, 232, FRAMEWIN_CF_MOVEABLE, 0 },

{ BUTTON_CreateIndirect, "", ID_BUTTON_8, 0, 0, 151, 207, 0, 0x0, 2 },//SKB 注意最后1个参数是2

{ EDIT_CreateIndirect, "Edit", ID_EDIT_0, 120, 1, 23, 13, 0, 0x64, 0 },

};

其中” ID_BUTTON_8”就是这个软键盘控件。

(4)别忘了在WM_INIT_DIALOG消息中把这个Button控件的绘制函数改成自定义绘制函数,这样我们想把这个Button控件画成什么样都行,emWin已经不参与这个控件的绘制工作了:

hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_8);

BUTTON_SetSkin(hItem, SKIN_buttonSKB3C);

如果不做第4步工作会怎样?当然显示的是那个大按键的原貌:

image005.gif (23.35 KB, 下载次数: 0)

2016-6-27 16:19 上传

(5)再重复一遍:论坛高手那么多,谁能把ButtonSKB演变成中文输入法控件?但是不能占用太多SRAM,在此谢过!

2016-6-27 16:21 上传

点击文件名下载附件

2016-6-27 16:21 上传

点击文件名下载附件

2016-6-27 16:21 上传

点击文件名下载附件

2016-6-27 16:22 上传

点击文件名下载附件

emwin 仪表_分享一个emWin软键盘控件相关推荐

  1. C#自定义软键盘控件及应用

    自定义控件代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...

  2. 用Silverlight打造一个相对安全的密码控件

    笔者最近的一个项目涉及到了支付动作,出于安全考虑,需要在密码控制上防键盘记录,传输加密等进行处理,其中难点在于防键盘记录. 现有的银行.支付宝.财付通.快钱等的支付控件都是自行开发,还需要对控件进行证 ...

  3. 想做输入法界面?安排,LVGL『keyboard键盘控件』介绍

    一. LVGL GUI键盘控件的概念 Keyboard 对象是一个特殊的 Button 矩阵,具有预定义的按键映射和其他功能,以实现虚拟键盘来编写文本. 二. LVGL GUI键盘小部件和样式 类似于 ...

  4. Touchgfx之如何打开和关闭键盘控件

    目录 1.实验环境 1.1 软件环境 1.2 硬件环境 2.实验目标 3.实验过程 4.实验总结 自定义控件之键盘教程: 一张图+一个Box+一个TextArea带你DIY不一样的数字键盘 手把手教你 ...

  5. SAP UI5 应用开发教程之三十二 - 如何创建一个自定义 SAP UI5 控件试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  6. 窗体中实现按 回车键 跳到下一个可选的TabIndex控件

    Form中一"textbox",两"button",如何实现在textbox中按下回车响应button.click事件 : 1)把按钮的tabindex依次设置 ...

  7. 新发现的一个pyqt5的绘图控件QCustomPlot2

    今天发现了一个新的绘图控件QCustomPlot2,据说性能也非常不错,这个图表库原生支持很多种图表类型,这点比pyqtgraph要好点,pyqtgraph本身支持的图表种类不是特别全,但是也算够用吧 ...

  8. 自定义view学习-手把手教你制作一个可扩展日历控件

    来看看效果图先,手把手教你实现一个简易,但高扩展度的日历控件,可自由扩展成签到,单选,多选日期. 首先我们来分析实现思路.对于上图的效果,很明显是一个6x7的表格. 我们可以两个for循环控制绘制每个 ...

  9. 一起实现一个健壮的课程表控件

    前言 一年前我在业余的时间做了一个课程表的界面,过程中基本上也很顺利的,近期由于一个校园项目的需要,所以就对其简单封装成了控件用在了项目中,但是在真正的项目中发现了很多当初没有考虑到的问题,所以在此将 ...

最新文章

  1. pytorch元素相乘_PyTorch – 变量和张量之间的元素乘法?
  2. 记录避免一些逻辑问题的过程
  3. 虚拟机ubuntu/pytorch/python出现killed已杀死
  4. redis 安装错误 jemalloc.h: No such file or directory
  5. Vh和Vw的简介和使用
  6. CentOS上快速安装Oracle服务器脚本
  7. sql server 2000 更改账户默认数据库
  8. Luogu2467 SDOI2010 地精部落 DP
  9. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_7_字符输出流的续写和换行...
  10. 8月份全国省会城市快递上门签收分析-谁是剁手王城?
  11. 渗透函数实现排序的函数层次聚类或者叫做凝
  12. 量化分析基本框架示例
  13. English考研句子第九句
  14. 在 RedHat、 CentOS、 Fedora 上安装 Teamviewer 9(转)
  15. Vue3.0系列(一): VUE3.0的新特性
  16. 全志H6 Android 7.0 平台 修改横竖屏显示
  17. Ubuntu无法重启:教你用u盘系统修复ubuntu
  18. 禁闭岛》剧情全解,结局只有一个,导演小细节处...
  19. ROsalind 014 Finding a Shared Motif
  20. 1 Linux Kali忘记用户名教程

热门文章

  1. 2022 新版UI界面 影视微信小程序源码 附教程
  2. 强网杯线上赛一道套娃MISC题解
  3. location ~ .php$,nginx location指令详解,
  4. nginx配置文件中server_name 和location意义
  5. 阿八个人博客:迟来的2020年终总结——再见2020,你好!2021
  6. ThinkPHP整合微信支付之刷卡模式
  7. 吴汝俊主演的新京剧电影《孟母三迁》首映
  8. 虚拟串口服务器原码,虚拟串口的完整源代码
  9. PAT A1105 Spiral Matrix ——黄师塔前江水东,春光懒困倚微风
  10. android ndk 文件管理,Android NDK 入门与实践