分享一个emWin软键盘控件
来源:互联网 发布:优化推广 编辑:程序博客网 时间:2024/06/14 02:34
花了两天时间做了个emWin软键盘控件,并命名为ButtonSKB控件:
前言:
(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组成:
(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步工作会怎样?当然显示的是那个大按键的原貌:
ButtonSKB控件源代码(未使用位图皮肤)
- 分享一个emWin软键盘控件
- EMWIN数字软键盘设计
- 分享一个可以监听软键盘显示隐藏的布局。
- emwin的进度条控件
- 分享一个日历控件
- 软键盘弹出控件上移
- [Android分享] 软键盘属性、事件
- 怎样在一个控件获得焦点时打开软键盘?(转)
- 封装一个类:软键盘弹出,将控件整体顶上去
- 封装一个类:软键盘弹出,将控件整体顶上去
- 软键盘挡住控件的问题
- Android 软键盘遮挡控件的解决办法
- 软键盘弹出,控件上移问题
- Android EditText控件屏蔽软键盘
- 解决 Andriod软键盘 将控件顶上
- QT做软键盘时将软键盘窗口控件放到指定控件的合适位置
- 分享一个winForm下的Chart控件
- 分享一个Winform下的分页控件
- leveldb源码阅读知识积累4
- qt-creator源码研究2
- iOS中的私有属性问题
- BAPI_SALESORDER_CREATEFROMDAT2 BAPI创建VA01 销售订单
- listview异步加载图片 转自:http://blog.csdn.net/pi9nc/article/details/9408635#0-tsina-1-87459-397232819ff9a47
- 分享一个emWin软键盘控件
- 启动停止守护进程
- 发布项目的记录
- iOS 动画之大波浪
- c语言常用系统函数
- Android编译系统详解(三)
- 基于TCP协议的文件传输,传输带文件名等信息的文件流
- 基于Socket的java网络编程
- 球钟问题