OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9639|回复: 25

点击edit如何弹出一个dialog?

[复制链接]

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-12
在线时间
3 小时
发表于 2015-1-6 14:49:11 | 显示全部楼层 |阅读模式
5金钱
现在一个Dialog界面里有几个edit   我点击一个edit 如何弹出一个软键盘dialog呢?
小弟刚学不久,希望用过的指点一下,或者在此之后看点儿什么资料比较好,感激不尽!!

最佳答案

查看完整内容[请看2#楼]

最后用 if(WM_GetDialogItem(hWin, GUI_ID_EDIT8) == WM_GetFocussedWindow()) 这样做的,有个问题就是新建的dialog第一个焦点不能在edit上。暂时就这样吧
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-12
在线时间
3 小时
 楼主| 发表于 2015-1-6 14:49:12 | 显示全部楼层
最后用
if(WM_GetDialogItem(hWin, GUI_ID_EDIT8) == WM_GetFocussedWindow())
这样做的,有个问题就是新建的dialog第一个焦点不能在edit上。暂时就这样吧
回复

使用道具 举报

70

主题

6684

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12613
金钱
12613
注册时间
2012-11-26
在线时间
3701 小时
发表于 2015-1-6 15:01:13 | 显示全部楼层
点击之后 会触发消息的

在这个消息case下   新建键盘   键盘回掉函数  自己写
学无止境
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-1-6 15:02:09 | 显示全部楼层
是emwin或者ucgui么?点击EDIT的话会有相应的响应,然后在这个响应里面调用软键盘,前提是你还要把软键盘做好的。这个不是一两句话能说清的,最好多跑几个EMWIN或者UCGUI的官方例程,要不然很难理解的
开往春天的手扶拖拉机
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-12
在线时间
3 小时
 楼主| 发表于 2015-1-6 16:35:30 | 显示全部楼层
回复【3楼】zuozhongkai:
---------------------------------
恩    UCGUI
我暂时先写了个软键盘dialog
现在的问题就是如何点击edit就弹出这个dialog

这个edit在dialog界面中。当我点击这个dialog中的这个edit时,消息是如何传递的呢,得到消息然后创建软键盘dialog就可以了
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-12
在线时间
3 小时
 楼主| 发表于 2015-1-6 16:36:30 | 显示全部楼层
回复【2楼】jermy_z:
---------------------------------
恩,我就是想知道这个   case 消息:

这个消息是什么,卡在这里,软键盘dialog已经写好了
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-1-6 16:50:52 | 显示全部楼层
EDIT小工具会将一下事件作为WM_NOTIFY_PARENT消息的一部分发送给DIALOG的回调函数的。
WM_NOTIFICATION_CLICKED                          已单击小工具。
WM_NOTIFICATION_RELEASED                       已释放小工具。
WM_NOTIFICATION_MOVED_OUT                   已单击小工具,并且指针已移出小工具,但没有释放。
WM_NOTIFICATION_VALUE_CHANGED            编辑小工具的值 (内容)已更改。

你在DIALOG的回调函数中对这些事件做出相应的处理,比如调用创建软键盘的函数等等!
如下图所示,只不过我这个是对BUTTON做处理的,多看看Segger官方的例程,理解回调机制,还有就是我这个是EMWIN的



开往春天的手扶拖拉机
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-12
在线时间
3 小时
 楼主| 发表于 2015-1-6 16:57:32 | 显示全部楼层
回复【6楼】zuozhongkai:
---------------------------------

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);
    }
}

这样写不行,哪里有问题呢
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-1-6 17:00:18 | 显示全部楼层
是什么样的问题?
开往春天的手扶拖拉机
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-12
在线时间
3 小时
 楼主| 发表于 2015-1-6 17:02:23 | 显示全部楼层
回复【8楼】zuozhongkai:
---------------------------------
我回调函数那样写,软键盘dialog没有调出来
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-12
在线时间
3 小时
 楼主| 发表于 2015-1-6 17:04:06 | 显示全部楼层
回复【9楼】gentleye:
---------------------------------
而且一点击那个edit界面就死掉了
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-1-6 17:04:33 | 显示全部楼层
估计是不能创建对话框吧,我记得官方有一个软键盘的例程,你可以参考一下
开往春天的手扶拖拉机
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-12
在线时间
3 小时
 楼主| 发表于 2015-1-6 17:13:25 | 显示全部楼层
回复【11楼】zuozhongkai:
---------------------------------
WIDGET_NumPad.c
这个文件我看了下,一时没看懂,我再仔细看看
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-12
在线时间
3 小时
 楼主| 发表于 2015-1-6 17:23:58 | 显示全部楼层
回复【11楼】zuozhongkai:
---------------------------------
请教一下 : GUI_EndDialog(hDlg, 1); 和 GUI_EndDialog(hDlg, 0); 有什么区别?

一个阻塞一个非阻塞?  什么意思呢...
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-12
在线时间
3 小时
 楼主| 发表于 2015-1-6 17:27:02 | 显示全部楼层
/*********************************************************************
*
*       _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是如何调出数字键盘的额...
回复

使用道具 举报

3

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
434
金钱
434
注册时间
2013-3-18
在线时间
82 小时
发表于 2015-1-9 10:05:35 | 显示全部楼层
回复【7楼】gentleye:
---------------------------------
EDIT事件WM_NOTIFY_PARENT消息下你的条件判断有点问题,if(NCode==WM_NOTIFICATION_CLICKED),还有创建窗口的时候,参数里有个父窗口的句柄,你这里是0,这个很有可能就是死机的问题。解决了这些,弹出一个窗口不难
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-12
在线时间
3 小时
 楼主| 发表于 2015-1-9 12:54:18 | 显示全部楼层
回复【15楼】holy404290384:
---------------------------------
感谢你的回复。
那个if(NCode==WM_NOTIFICATION_CLICKED)改成这样,还是进不进。
父窗口是不是设置个背景窗口作为所有dialog的父窗口比较好,我过会儿试试吧,再次感谢
回复

使用道具 举报

70

主题

6684

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12613
金钱
12613
注册时间
2012-11-26
在线时间
3701 小时
发表于 2015-1-18 12:57:54 | 显示全部楼层
回复【17楼】gentleye:
---------------------------------
你可以设置焦点  setfoucs  貌似是这个函数  你找找看
学无止境
回复

使用道具 举报

18

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2015-1-16
在线时间
28 小时
发表于 2015-1-22 21:25:41 | 显示全部楼层
QT有事件监听器,可以装上
回复

使用道具 举报

17

主题

293

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-26
在线时间
1 小时
发表于 2015-1-24 11:12:06 | 显示全部楼层

回复【10楼】 gentleye :
---------------------------------
如果你使用了操作系统,那么你可以这样做:
首先为软键盘单独建立一个任务,该任务的入口就是如EDIT等所有可以输入文字的句柄,在EDIT的回掉函数里面向软键盘任务发送消息,软键盘任务得到调度。我就是这样搞的,感觉还可以

 点击EDIT输入框后弹出软键盘:



回复

使用道具 举报

8

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2013-12-27
在线时间
15 小时
发表于 2015-4-29 23:14:24 | 显示全部楼层
回复【20楼】kassandra:
---------------------------------
大虾指教一下,你在一个任务里面创建一个对话框以后,当这个对话框不需要时原来的主对话框需不需要重绘?还要有多个EDIT时怎么对应获取键盘的输入值,根据编辑框的ID吗?
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2012-10-15
在线时间
41 小时
发表于 2015-4-30 11:26:34 | 显示全部楼层
遇到和楼主一样的问题,今天发现时这个消息的问题WM_NOTIFICATION_GOT_FOCUS,在这个消息写点击就好了
知足常乐
回复

使用道具 举报

17

主题

293

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-26
在线时间
1 小时
发表于 2015-5-17 14:11:42 | 显示全部楼层
回复【21楼】zzz1223887687:
---------------------------------
肯定需要重绘啊,多个EDIT,是通过编辑框的ID来判别的输入来源的
回复

使用道具 举报

12

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2014-8-19
在线时间
23 小时
发表于 2015-5-26 16:46:00 | 显示全部楼层
回复【20楼】kassandra:
---------------------------------
大哥 你可以不可以把这部份源码贴出来 我看下 我还不是很灵活的用这些接口函数 可以大自的说下 流程就行了 谢谢你好人
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-2-7
在线时间
8 小时
发表于 2016-1-6 00:07:36 | 显示全部楼层
顶一下
回复

使用道具 举报

2

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
金钱
437
注册时间
2013-7-30
在线时间
104 小时
发表于 2016-1-6 00:19:35 | 显示全部楼层
kassandra 发表于 2015-1-24 11:12
回复【10楼】 gentleye :
---------------------------------
如果你使用了操作系统,那么你可以这样 ...

大神啊!能不能分享一些EMWIN的小例程,让我们初学者学习学习,谢谢啦。
不努力,谁也给不了你想要的生活!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-1 16:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表