完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
现在一个Dialog界面里有几个edit 我点击一个edit 如何弹出一个软键盘dialog呢?
小弟刚学不久,希望用过的指点一下,或者在此之后看点儿什么资料比较好,感激不尽!! |
|
相关推荐
24个回答
|
|
|
|
|
|
|
|
|
是emwin或者ucgui么?点击EDIT的话会有相应的响应,然后在这个响应里面调用软键盘,前提是你还要把软键盘做好的。这个不是一两句话能说清的,最好多跑几个EMWIN或者UCGUI的官方例程,要不然很难理解的
|
|
|
|
|
|
恩 UCGUI
我暂时先写了个软键盘dialog 现在的问题就是如何点击edit就弹出这个dialog 这个edit在dialog界面中。当我点击这个dialog中的这个edit时,消息是如何传递的呢,得到消息然后创建软键盘dialog就可以了 |
|
|
|
|
|
|
|
|
|
|
|
EDIT小工具会将一下事件作为WM_NOTIFY_PARENT消息的一部分发送给DIALOG的回调函数的。
WM_NOTIFICATION_CLICKED 已单击小工具。 WM_NOTIFICATION_RELEASED 已释放小工具。 WM_NOTIFICATION_MOVED_OUT 已单击小工具,并且指针已移出小工具,但没有释放。 WM_NOTIFICATION_VALUE_CHANGED 编辑小工具的值 (内容)已更改。 你在DIALOG的回调函数中对这些事件做出相应的处理,比如调用创建软键盘的函数等等! 如下图所示,只不过我这个是对BUTTON做处理的,多看看Segger官方的例程,理解回调机制,还有就是我这个是EMWIN的 |
|
|
|
|
|
void _cbDetectCallback(WM_MESSAGE * pMsg)
{ OS_CPU_SR cpu_sr = 0; int NCode, Id; WM_HWIN hWin = pMsg->hWin; switch (pMsg->MsgId) { case WM_INIT_DIALOG: Init_DetectDialog(pMsg); break; case WM_KEY: switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) { case GUI_KEY_ESCAPE: GUI_EndDialog(hWin, 1); break; case GUI_KEY_ENTER: GUI_EndDialog(hWin, 0); break; } break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; switch (Id) { case GUI_ID_BUTTON2: if(NCode==WM_NOTIFICATION_RELEASED) { /* 执行相应的程序*/ } break; case GUI_ID_EDIT0: if(WM_NOTIFICATION_CLICKED) { GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0); } break; default: break; } break; default: WM_DefaultProc(pMsg); } } 这样写不行,哪里有问题呢 |
|
|
|
|
|
是什么样的问题?
|
|
|
|
|
|
我回调函数那样写,软键盘dialog没有调出来
|
|
|
|
|
|
而且一点击那个edit界面就死掉了
|
|
|
|
|
|
估计是不能创建对话框吧,我记得官方有一个软键盘的例程,你可以参考一下
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*********************************************************************
* * _cbDialogUser * * urpose: * Callback function of the user dialog. */ static void _cbDialogUser(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: for (i = 0; i < 2; i++) { hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT0 + i); /* Get the handle of the edit widget */ EDIT_SetText(hItem, "12345678"); /* Set text */ } break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */ NCode = pMsg->Data.v; /* Notification code */ switch (NCode) { case WM_NOTIFICATION_RELEASED: /* React only if released */ if (Id == GUI_ID_OK) { /* OK Button */ GUI_EndDialog(hDlg, 0); } if (Id == GUI_ID_CANCEL) { /* Cancel Button */ GUI_EndDialog(hDlg, 1); } break; } break; default: WM_DefaultProc(pMsg); } } 没有看出这个dialog中的edit是如何调出数字键盘的额... |
|
|
|
|
|
EDIT事件WM_NOTIFY_PARENT消息下你的条件判断有点问题,if(NCode==WM_NOTIFICATION_CLICKED),还有创建窗口的时候,参数里有个父窗口的句柄,你这里是0,这个很有可能就是死机的问题。解决了这些,弹出一个窗口不难
|
|
|
|
|
|
感谢你的回复。
那个if(NCode==WM_NOTIFICATION_CLICKED)改成这样,还是进不进。 父窗口是不是设置个背景窗口作为所有dialog的父窗口比较好,我过会儿试试吧,再次感谢 |
|
|
|
|
|
你可以设置焦点 setfoucs 貌似是这个函数 你找找看
|
|
|
|
|
|
QT有事件监听器,可以装上
|
|
|
|
|
|
如果你使用了操作系统,那么你可以这样做:
首先为软键盘单独建立一个任务,该任务的入口就是如EDIT等所有可以输入文字的句柄,在EDIT的回掉函数里面向软键盘任务发送消息,软键盘任务得到调度。我就是这样搞的,感觉还可以 |
|
|
|
|
|
大虾指教一下,你在一个任务里面创建一个对话框以后,当这个对话框不需要时原来的主对话框需不需要重绘?还要有多个EDIT时怎么对应获取键盘的输入值,根据编辑框的ID吗?
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1018 浏览 1 评论
1849 浏览 0 评论
1830 浏览 1 评论
3254 浏览 5 评论
3581 浏览 9 评论
1021浏览 1评论
1850浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1360浏览 1评论
1852浏览 0评论
1178浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 00:27 , Processed in 0.965388 second(s), Total 78, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1400