备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果。(2)看完教程000~005就基本会用emWin做项目,其他章节可以需要时再参考。

这个emWin的中文拼音输入法已经做的很完善,也经过比较详细的测试,可以直接拿来当做模板使用(根据需要修改键盘的大小);实现的程序也非常简洁,同时也使用了emWin的一些知识点,值得阅读学习;若你还不会用emWin,可以看:”emWin 2天速成实例教程”。

使用例程:
用emWin脱机模拟仿真软件Code::Blocks(”软件/资料下载”栏目可下载)打开工程文件:SimulationTrial.cbp然后编译工程:

运行emWin中文拼音输入法程序:

点击编辑框后自动弹出键盘的实现方法:

总体思想是在ID_EDIT_0~ID_EDIT_5点击消息中用WM_ShowWindow()函数显示出键盘,并在”Ese”按键的点击消息中用WM_HideWindow()函数隐藏键盘:

而下面这段程序的作用是判断并移动键盘到合适的位置:

总体的思想是判断键盘有没有超出屏幕范围,如果超出则移动键盘到合适的位置,WM_GetWindowOrgX(pMsg->hWinSrc)是获取编辑框位置的函数,如果不理解” pMsg->hWinSrc”,可以看:emWin 2天速成实例教程005_控件聚焦和用户消息的使用方法,其他API函数可以查阅emWin说明书,这些API函数是非常有用的,可以记住它们。

键盘处理程序:

这里只能简单的说说处理的思想,很多细节还需要耐心去看程序才行。

在初始化消息WM_INIT_DIALOG中,用下面程序禁止掉键盘里面所有按键的聚焦,因为如果不这样做的话,点击键盘之后,焦点光标就不会停留在编辑框了:
for(i=ID_BUTTON_0;i<=ID_BUTTON_34; i++) BUTTON_SetFocussable(WM_GetDialogItem(pMsg->hWin,i), 0);

在ID_BUTTON_0~ID_BUTTON_26的点击消息中,根据当前输入法做相应的处理,如果是英文或符号比较简单,获取按键的字符并用GUI_StoreKeyMsg()函数向emWin内部储存键值即可,emWin内部会自动处理并显示到编辑框里去;如果是中文,则将按键字符显示到ID_TEXT_0文本控件(显示拼音的那个),并用WM_SendMessage()函数向ID_TEXT_0发送一个WM_NOTIFICATION_USER+0消息,通知ID_TEXT_0根据自己的内容去检索拼音并将汉字显示到ID_TEXT_1~ID_TEXT_9文本控件中;为什么要用发消息?为什么不直接在那里处理?因为很多地方都需要重新检索并更新ID_TEXT_1~ID_TEXT_9的内容,这样做是不是可以省掉很多程序?可以看出emWin消息的作用了吧?

汉字选择:

在ID_TEXT_1~ID_TEXT_9文本控件的点击消息中,把自己的内容显示到当前聚焦的编辑框中去即可:

汉字检索翻页:

这是中文拼音输入法程序设计的难点,如果思路不好,程序会非常臃肿,笔者也是苦苦思索才非常简洁的实现这一点:

基本思想是:在拼音检索时,把检索到的中文字符串分组,每组9个汉字(因为每次显示9个汉字ID_TEXT_1~ID_TEXT_9),每一组对应一个指针并将指针存于pbuffPY[]数组中,这样翻页时就知道怎么做了吧?

这里重点解释下GUI_pUC_API->pfGetCharSize(),这个函数的作用是返回一个汉字占用几个字节,也许你会说:一个汉字不是占用两个字节吗?错!要看你的emWin用什么编码,如果是GBK或GB2312编码占两个字节没错,但如果是UTF-8编码呢?就不是占用两个字节了;是在哪里告诉emWin用什么编码呢?

另外,如果你用的是GBK或GB2312编码,emWin是没有GUI_UC_SetEncodeGBK()和GUI_UC_SetEncodeGB2312()函数的,需要自己实现,也许在德国人眼里,是没有GBK或GB2312概念吧。

源码/软件下载

emWin 2天速成实例教程012_基于STM32单片机的全键盘中文汉字拼音输入法相关推荐

  1. emWin 2天速成实例教程002_多个页面窗口切换

    备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果.(2)看完教程000-005就基本会用emWin做项目,其他章节可以需要时再参考. ...

  2. emWin 2天速成实例教程000_如何快速入门ucGUI/emWin

    备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果.(2)看完教程000-005就基本会用emWin做项目,其他章节可以需要时再参考. ...

  3. emWin 2天速成实例教程007_Graph波形曲线图形控件使用方法

    备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果.(2)看完教程000-005就基本会用emWin做项目,其他章节可以需要时再参考. ...

  4. 基于STM32单片机光学指纹识别模块(FPM10A)全教程(基于C语言)

    本文转载,其来源在参考中:1,稍加修改,因为近期使用到这个模块,故而加以整理! 1.平台 首先我使用的是 奋斗 STM32 开发板 MINI板 基于STM32单片机光学指纹识别模块(FPM10A)全教 ...

  5. STM32开发实例 基于STM32单片机的蓝牙手环

    一.系统设计 本次是基于STM32单片机的简易蓝牙手环,手指放在心率检测处,心率传感器就能实时的检测使用者的心率的变化,并在显示屏上进行显示:通过DS18B20检测体温,体温数值也会在显示屏上进行显示 ...

  6. 基于stm32单片机的电子称设计

    基于stm32单片机的电子称设计 **==完整论文和程序关注我获取==** 摘要 关键字 1 绪论 2 系统硬件方案设计 2.1系统总体设计方案比较与论证 2.2系统元器件选型及器件参数介绍 2.2. ...

  7. 最简单DIY基于STM32单片机的WIFI智能小车设计方案

    STM32库函数开发系列文章目录 第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇:最简单DIY基于STM32F ...

  8. 基于STM32单片机的智能家居烟雾温度火灾防盗报警的设计与实现

    功能介绍 以STM32单片机作为主控系统: LCD1602液晶显示屏来显示显示测得的值: SR501人体红外感应是否有人进行防盗: 通过烟雾传感器MQ-2获取前的烟雾值: 通过DHT11温湿度传感器来 ...

  9. delphi 数字识别_基于STM32单片机的车牌识别

    系统介绍    使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO).STM32进行了16倍频.识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配. 识别过程分 ...

最新文章

  1. HDU - 3247 Resource Archiver(AC自动机+状压dp+bfs)
  2. java写spark碰到输出为[Ljava.lang.String;@889a8a8的情况
  3. 红外探头_问题3: 关于在线近红外光谱仪的探头
  4. 2021瑞安高考成绩查询,温州教育网官网登录入口2021瑞安中考成绩查询中招查分系统...
  5. 分布式缓存原理——一致性hash算法(hash环)、Hash槽
  6. STM32F103:一.(1)MDK的配置
  7. 森林图怎么分析_新疆森林消防总队特勤大队:“火焰蓝”备战春防,我们时刻准备着!...
  8. 关于SVM参数cg选取的总结帖[matlab-libsvm]
  9. 关于断点续传的那些事
  10. win10wifi多了数字_Win10 技巧:如何修改有线 / WiFi 网络优先级?
  11. codeforces 645 D Robot Rapping Results Report 【树形dp】
  12. 专业CDR插件牛为设计大师
  13. 网站运维:git工具(10):GitLab安装和使用
  14. 洛谷P1433 吃奶酪--Java解法(货郎担问题)
  15. 国产男装「升级潮」下,九牧王、劲霸、海澜之家们顺利「上分」了吗?
  16. C# 使用Interop.Excel一些报错的对应
  17. socket是什么意思
  18. [读书笔记]Core Java: Volume I - Fundamentals Chapter 8
  19. .bxl 格式 转 adtium designer 格式
  20. 《初等数论》:最大公因数与最小公倍数

热门文章

  1. 微信小程序云开发-内容管理系统(CMS)小案例
  2. kali编译aosp和xposed
  3. 数值分析(1)-什么是数值分析
  4. 最小二乘法的曲线拟合方法在MATLAB中的实现
  5. Ubuntu虚拟机中网络中没有网卡
  6. c语言 程序开机自启
  7. 怎样远程控制别人的电脑
  8. 【面试通关篇】13个offer,8家SSP,谈谈我的秋招经验
  9. python-网页请求返回状态码429
  10. K3 Wise 常用表【转载】