OpenEdv-开源电子网

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

emWin控件聚焦后,如何接受其不支持的按键事件?

[复制链接]

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-4
在线时间
8 小时
发表于 2015-11-3 18:37:11 | 显示全部楼层 |阅读模式
5金钱
我的项目是用实体按键来操作emWin界面的:
emWin的listbox控件聚焦后可用上下按键来选择条目,但此时我要获取ENTER按键来进入下一个界面就不行了。
我想在回调函数里加个计时器,在窗口和listbox控件之间不停的切换焦点,以便捕获ENTER按键事件

最佳答案

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

回复【7楼】emWin: ------------------------------- 非常感谢你的解答! 正如你所说的,子控件不支持的按键,父窗口会收到。 我出现上面的问题完全是我的疏忽引起的,是因为我建立控件时,把父窗口搞错了,而建到了最底层的桌面窗口了,所以当前窗口当然收不到控件的任何按键消息了。 因为我用的是128*64传统的LCD屏,受硬件条件限制,只能用listbox做菜单项选择。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-4
在线时间
8 小时
 楼主| 发表于 2015-11-3 18:37:12 | 显示全部楼层
回复【7楼】emWin:
-------------------------------
非常感谢你的解答!
正如你所说的,子控件不支持的按键,父窗口会收到。 我出现上面的问题完全是我的疏忽引起的,是因为我建立控件时,把父窗口搞错了,而建到了最底层的桌面窗口了,所以当前窗口当然收不到控件的任何按键消息了。

因为我用的是128*64传统的LCD屏,受硬件条件限制,只能用listbox做菜单项选择。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-11-3 20:58:07 | 显示全部楼层
帮顶....
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-4
在线时间
8 小时
 楼主| 发表于 2015-11-3 23:54:25 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
翻看了emwin关于edit的官方例程,得到一点启示:
为listbox控件自定义一个回调函数,通过回调函数捕获ENTER键值,并自定义一个消息发给主窗口。

在官方edit例程中,自定义的回调函数是这样处理的:
/*********************************************************************
*
*       _cbEdit
*/
static void _cbEdit(WM_MESSAGE * pMsg) {
  const WM_KEY_INFO * pInfo;
  WM_MESSAGE          Msg;

  switch (pMsg->MsgId) {
  case WM_KEY:
    pInfo = (WM_KEY_INFO *)pMsg->Data.p;
    if (pInfo->Key == GUI_KEY_ENTER) {
      if (pInfo->ressedCnt == 0) {
        Msg.MsgId   = WM_APP_SHOW_TEXT;
        Msg.hWinSrc = pMsg->hWin;
        WM_SendMessage(WM_HBKWIN, &Msg);
        return;
      }
    }
  }
  EDIT_Callback(pMsg);
}
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-4
在线时间
8 小时
 楼主| 发表于 2015-11-4 00:03:32 | 显示全部楼层
当然如果把listbox控件放在对话框中,即不存在上述我描述的现象,因为对话框是具有接收ENTER按键的机制的
回复

使用道具 举报

18

主题

422

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1139
金钱
1139
注册时间
2014-5-24
在线时间
116 小时
发表于 2015-11-4 15:26:03 | 显示全部楼层
查了下Enter不在LISTBOX按键响应列表,你的问题略显奇怪
I See Fire.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.  只给方向,不妨碍思考
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-4
在线时间
8 小时
 楼主| 发表于 2015-11-4 20:54:47 | 显示全部楼层
回复【5楼】emWin:
---------------------------------
可能我没有表述清楚,问题的出现场景是这样的:
我在一个窗口上只建立了一个控件listbox,这个控件主要用于菜单的选择,当把listbox聚焦后,可以通过上下实体按键选择条目,但我选择菜单条目后,要求按ENTER键能进入下一个窗口并关闭当前窗口,而我按键捕获操作都放在当前窗口的回调函数中。正是因为当前焦点在listbox控件中,所以当前窗口是不能捕获到LISTBOX的按键响应的(而上下实体按键能选择条目是emWin内部自动执行的)。

所以我专门为LISTBOX控件建立了自定义回调函数,专门用于捕获LISTBOX的按键消息,并将消息再封装回传给当前窗口的回调函数。
不知道我这样的解决方法是不是有点绕。
回复

使用道具 举报

18

主题

422

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1139
金钱
1139
注册时间
2014-5-24
在线时间
116 小时
发表于 2015-11-5 11:58:11 | 显示全部楼层
回复【6楼】jariver:
---------------------------------
第1段是你验证过了的?子控件不支持的按键,父窗口会收到。

PS:需要菜单,你选择菜单控件呀
I See Fire.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.  只给方向,不妨碍思考
回复

使用道具 举报

5

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2017-10-31
在线时间
23 小时
发表于 2018-1-6 15:54:11 | 显示全部楼层
大哥你怎么做的,我也在做这个,能发个详细的例子给我不,万分感谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 00:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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