emwin实体按键_qt指示灯控件

emwin实体按键_qt指示灯控件分享一个emWin软键盘控件[复制链接]本帖最后由glcd于2016-6-2716:30编辑花了两天时间做了个emWin软键盘控件,并命名为ButtonSKB控件:image001.png(20.29KB,下载次数:0)2016-6-2716:19上传前言:(1)ButtonSKB已经是1个控件,即可以像使用Button控件一样使用ButtonSKB。(2)ButtonSKB…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

分享一个emWin软键盘控件

[复制链接]

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

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

a26d678767e8b431ecd7a25f1936bdc5.gif

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组成:a26d678767e8b431ecd7a25f1936bdc5.gif

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步工作会怎样?当然显示的是那个大按键的原貌:a26d678767e8b431ecd7a25f1936bdc5.gif

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

2016-6-27 16:19 上传

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

b4a14ca3d2fdf156ae1110fd9ebad1ad.gif

2016-6-27 16:21 上传

点击文件名下载附件

b4a14ca3d2fdf156ae1110fd9ebad1ad.gif

2016-6-27 16:21 上传

点击文件名下载附件

b4a14ca3d2fdf156ae1110fd9ebad1ad.gif

2016-6-27 16:21 上传

点击文件名下载附件

b4a14ca3d2fdf156ae1110fd9ebad1ad.gif

2016-6-27 16:22 上传

点击文件名下载附件

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182121.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用批处理命令向win server AD域中批量添加用户实现

    使用批处理命令向win server AD域中批量添加用户实现因为要用个批处理命令在WindowsServer里面批量添加域用户,所以需要使用批处理命令。我这篇是纯新手教程,在百度上搜了一些批处理命令感觉属于进阶教程,研究了两天才完成我要完成的目标。下面从头说一下:批处理bat文档建立。直接新建一个TXT文档然后把后缀名改成.bat就可以了,就是一个bat文档,双击可以运行。注意:bat文件在哪,他的运行路径就在哪。添加成功的用户

    2022年5月13日
    46
  • Linux的ssh登录命令,Linux SSH登录命令总结

    Linux的ssh登录命令,Linux SSH登录命令总结当项目计算量比较大 我们需要将任务分布到多台电脑上面运行 因为对于分布式概念不熟 就想到了 Linux 最简单的 ssh 协议 远程控制其他电脑 然后写 shell 脚本统一在所有电脑上运行程序 简单说 SSH 是一种网络协议 用于计算机之间的加密登录 如果一个用户从本地计算机 使用 SSH 协议登录另一台远程计算机 我们就可以认为 这种登录是安全的 即使被中途截获 密码也不会泄露 最早的时候 互联网通信都是明文通

    2025年6月22日
    2
  • LINUX内核目录文件说明

    LINUX内核目录文件说明 内核空间和用户空间     在下载内核前,我们应该讨论一些重要的术语和事实。首先了解一下内核空间和用户空间    内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟空间中。   1.内核空间    Linux内核是一个宏内核,这意味着整个操作系统都运行在内核预留的内存里。内…

    2022年7月23日
    13
  • HashMap 与 ConcurrentHashMap 原理总结

    HashMap 与 ConcurrentHashMap 原理总结

    2021年10月5日
    41
  • HibernateTemplate的使用方法

    HibernateTemplate的使用方法HibernateTemplate的使用方法

    2022年6月22日
    28
  • mysql 的longtext类型对应java什么类型?

    mysql 的longtext类型对应java什么类型?在mysql的shu数据库中我们存的是小图片的base64位的编码信息。那么在java中对应什么类型呢?`cardPic`longtextCOLLATEutf8mb4_unicode_ciCOMMENT’图片正面’,`cardPic1`longtextCOLLATEutf8mb4_unicode_ciCOMMENT’图片背面’,具体代码查看:https://suxi…

    2022年5月14日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号