EMWIN数字软键盘设计
来源:互联网 发布:淘宝千里眼插件免费的 编辑:程序博客网 时间:2024/06/05 12:42
最近学习stm32的emwin界面,编写了一个数字软键盘的功能,其中遇到了一些问题,也学到了一些经验。我想要实现的功能是在如图所示的界面下,点击文本框弹出软键盘,能够通过软键盘输入0到9和小数点,tab键实现下一格,
输入完毕后点击enter关闭软键盘。
一开始用FRAMWIN工具做了窗口和键盘两个界面,通过判断点击文本框调用软键盘本身是没有输入聚焦的,当采用BUTTON_SetFocussable(hItem, 0)将按键禁止聚焦后,就可以将焦点聚集在文本框上,而如果使用FRAMWIN控件,无法对FRAMWIN窗口禁止聚焦,所以在输入时焦点会聚集在键盘从而无法将键值发送到文本框。
下面是键盘与界面的回调函数
static void _cbDialogKeyboard(WM_MESSAGE * pMsg) { GUI_RECT r; unsigned i; int NCode; unsigned Id; int Pressed; WM_HWIN hItem; WM_HWIN hDlg; Pressed = 0; hDlg = pMsg->hWin; switch (pMsg->MsgId) { case WM_PAINT: WM_GetClientRect(&r); GUI_SetColor(0x000000); GUI_DrawRect(r.x0, r.y0, r.x1, r.y1); GUI_SetColor(0xffffff); GUI_DrawHLine(r.y0 + 1, r.x0 + 1, r.x1 - 2); GUI_DrawVLine(r.x0 + 1, r.y0 + 1, r.y1 - 2); GUI_SetColor(0x555555); GUI_DrawHLine(r.y1-1, r.x0 + 1, r.x1 - 1); GUI_DrawVLine(r.x1-1, r.y0 + 1, r.y1 - 2); break; case WM_INIT_DIALOG: for (i = 0; i < GUI_COUNTOF(_aDialogKeyboard) - 1; i++) { hItem = WM_GetDialogItem(hDlg, GUI_ID_USER + i); BUTTON_SetFocussable(hItem, 0); } WM_GetDialogItem(hDlg, GUI_ID_USER + 12); //ʲôÒâ˼ break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; switch (NCode) { case WM_NOTIFICATION_CLICKED: Pressed = 1; case WM_NOTIFICATION_RELEASED: if ((Id >= GUI_ID_USER) && (Id <= (GUI_ID_USER + GUI_COUNTOF(_aDialogKeyboard) - 2))) { int Key; if (Id < GUI_ID_USER + 11) { char acBuffer[10]; BUTTON_GetText(pMsg->hWinSrc, acBuffer, sizeof(acBuffer)); /* Get the text of the button */ Key = acBuffer[0]; } if (Id == GUI_ID_USER + 11) { Key = GUI_KEY_DELETE; } if (Id == GUI_ID_USER + 12) { Key = GUI_KEY_TAB; } GUI_SendKeyMsg(Key, Pressed); } if (Id == GUI_ID_USER + 13){ WM_DeleteWindow(hDlg); } break; } default: WM_DefaultProc(pMsg); }}static void _cbDialogPZT(WM_MESSAGE * pMsg) { int i; int NCode; int Id; WM_HWIN hDlg; WM_HWIN hItem; hDlg = pMsg->hWin; switch (pMsg->MsgId) { case WM_INIT_DIALOG: FRAMEWIN_SetFont(hDlg,&GUI_Font24B_ASCII); FRAMEWIN_SetTextAlign(hDlg,GUI_TA_VCENTER|GUI_TA_CENTER); FRAMEWIN_AddCloseButton(hDlg, FRAMEWIN_BUTTON_RIGHT, 0); FRAMEWIN_AddMaxButton(hDlg, FRAMEWIN_BUTTON_RIGHT, 1); FRAMEWIN_AddMinButton(hDlg, FRAMEWIN_BUTTON_RIGHT, 2); FRAMEWIN_SetTitleHeight(hDlg,30); for (i = 14; i < 30; i++) { EDIT_EnableBlink(WM_GetDialogItem(hDlg, GUI_ID_USER + i), 500, 1); hItem = WM_GetDialogItem(hDlg, GUI_ID_USER + i); EDIT_SetText(hItem, ""); } break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; switch (NCode) { case WM_NOTIFICATION_RELEASED: if ((Id >= GUI_ID_USER + 14) && (Id <= GUI_ID_USER + 29)) { Keyboard(); } if (Id == GUI_ID_OK){ WM_DeleteWindow(hDlg); } break; } break; default: WM_DefaultProc(pMsg); }}
在模拟器上调试成功后,烧进stm32时发现按键盘按键时,按一下按键键盘界面就会隐藏到显示界面后面去了,于是采用WM_SetStayOnTop(hWin, 1)函数使键盘界面始终保持在最前面。
0 0
- EMWIN数字软键盘设计
- 分享一个emWin软键盘控件
- 【android开发】自定义数字软键盘的设计与实现
- 【android开发】自定义数字软键盘的设计与实现
- winform数字软键盘
- 自定义数字软键盘
- 自定义的数字软键盘
- android 自定义数字软键盘
- 【android开发】自定义数字软键盘的设计与实现(1)
- 【android开发】自定义数字软键盘的设计与实现(2)
- 【android开发】自定义数字软键盘的设计与实现(2)
- 【android开发】自定义数字软键盘的设计与实现(1)
- javascript实现数字随机软键盘
- javascript实现数字随机软键盘
- android-仿ios纯数字软键盘
- Qt实战开发-数字软键盘
- 自定义软键盘,随机数字位置键盘
- ARM4开发板的EMWIN设计
- java中的各种数据类型在内存中存储的方式
- java类与对象
- 【杭电】5666 快乘
- localStorage的使用
- HOG特征中的三线插值法
- EMWIN数字软键盘设计
- tomcat 宕机问题分析及解决
- python调用java程序--jpype
- Mongodb 集群keyFile认证
- C++泛型编程与函数模板
- 面向对象方法开发的方法
- 算法第三周
- idea 读取文件失败
- 算法笔试面试高频题之二-(排序算法)