硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3358|回复: 18
收起左侧

[emWin] 实体按键控制的多按钮切换聚焦设计?

[复制链接]

6

主题

19

回帖

6

积分

新手上路

积分
6
发表于 2017-2-17 17:01:16 | 显示全部楼层 |阅读模式
设计一个如下图的STemWin界面,公司要求支持触摸跟实体按键功能,实体按键功能有上下左右键、确认键、删除键等,其中上下左右键用来切换按钮控件的聚焦,确认键用来确定有聚焦控件,激发其功能,删除键用来修改错误字符和数字。我参考了大侠eric2013ATM程序,本人才疏学浅,但还是未能编写程序,主要有以下疑问:
1、控件聚焦问题:怎样让控件(图中全部为Button控件)的焦点按照我们制定的方向切换,比如一上电,先聚焦在“主菜单”按钮,然后用左右键来切换到路径:
(1)保护状态→DSP采样值,从图上看用左右键切换还有三条路径分别为:(2)显示报告→动作报告;(3)打印报告→定值清单;(4)整定定值→装置参数;
其中从“保护状态”按钮切换到“显示报告”按钮用上下键切换;用上下键切换的路径还有以下几条:
(1)保护状态→显示报告→……→程序版本→退出;(大分支)
(2)DSP采样值→CPU采样值→……→开路显示→退出;
(3)动作报告→自检报告→……→退出;
(4)定值清单→动作报告→……→程序版本→退出;
(5)装置参数→保护定值→……→复制定值→退出;
其中当聚焦到上述第二分支的“退出”按钮时,按上下键不得聚焦到下路径的按钮(比如聚焦到第二条路径的“退出”按钮时,按上下键不得跳跃聚焦到第三条路径的“动作报告”按钮,其余类似),按所有的“退出”键,聚焦重新到“主菜单”按钮;我参考了ATM程序后,用来切换聚焦的函数是:WM_SetFocusOnPrevChild(hWin)
WM_SetFocusOnNextChild(hWin),好像它们切换的只是按照一条特定路径而已,且程序按钮控件比较少,相对容易实现,多条路径后就会变得随机了。假如按上面的这么多的路径,又有好多限制条件,该怎样编程呢?
2、        WM_SetFocusOnPrevChild(hWin)WM_SetFocusOnNextChild(hWin)这两条函
数在emWin官方的哪个版本?我在官方5.26版本查不到!
哪位大侠知道上述问题的解决办法,能否跟我分享?本人不胜感激!
205124dt82egz2zdhhuedx.jpg [sub][/sub][sup][/sup][strike][/strike]
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-2-18 10:06:28 | 显示全部楼层
聚焦不好用就发emWin自定义消息吧,在自定义消息路面,自己设置聚焦到那个控件,这样就可以完整按照自己的方式操作。
聚焦函数是WM_SetFocus
回复

使用道具 举报

6

主题

19

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2017-2-18 15:58:06 | 显示全部楼层

回 eric2013 的帖子

eric2013:聚焦不好用就发emWin自定义消息吧,在自定义消息路面,自己设置聚焦到那个控件,这样就可以完整按照自己的方式操作。
聚焦函数是WM_SetFocus
(2017-02-18 10:06)
谢谢大侠eric2013,我也有跟大侠类似的想法,但我还用到控件的ID号,先通过函数WM_GetDialogItem()求出控件的句柄,然后用WM_SetFocus(hWin)设置控件聚焦。不知道大侠用到控件ID没有?还是直接用WM_SetFocus(hWin)设置就可以了?本人刚学emWin,编程还不够规范!大侠是否有这方面好的例程代码供我参考?还有大侠的ATM代码里面用到的WM_SetFocusOnPrevChild(hWin)、WM_SetFocusOnNextChild(hWin)这两条函数在emWin官方的哪个版本?我在官方emWin 5.26指导手册版本查不到!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-2-19 10:28:30 | 显示全部楼层

回 robot_w 的帖子

robot_w:谢谢大侠eric2013,我也有跟大侠类似的想法,但我还用到控件的ID号,先通过函数WM_GetDialogItem()求出控件的句柄,然后用WM_SetFocus(hWin)设置控件聚焦。不知道大侠用到控件ID没有?还是直接用WM_SetFocus(hWin)设置就可以了?本人刚学emWin,编程还不够规范!大侠是否有这方面 .. (2017-02-18 15:58) 
1. 控件的ID在创建的时候已经设置了。
2. WM_SetFocusOnNextChild和WM_SetFocusOnPrevChild两个函数的在手册上面没有的。这两个也是在官方的例子里面有使用,所以也就被我们大家拿来用了。
回复

使用道具 举报

6

主题

19

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2017-2-19 17:12:12 | 显示全部楼层
再次感谢eric2013大侠给我的解答!![s:140] [s:142]
回复

使用道具 举报

8

主题

59

回帖

83

积分

初级会员

积分
83
发表于 2017-2-21 10:45:39 | 显示全部楼层

回 eric2013 的帖子

eric2013:

1. 控件的ID在创建的时候已经设置了。
2. WM_SetFocusOnNextChild和WM_SetFocusOnPrevChild两个函数的在手册上面没有的。这两个也是在官方的例子里面有使用,所以也就被我们大家拿来用了。
eric大仙:
我使用WM_SetFocusOnNextChild这个函数,页面上有5个按钮,为什么没有效果[s:147][s:147]
QQ截图20170221104818.png
回复

使用道具 举报

8

主题

59

回帖

83

积分

初级会员

积分
83
发表于 2017-2-21 11:45:27 | 显示全部楼层

回 邵少少 的帖子

邵少少:eric大仙:
我使用WM_SetFocusOnNextChild这个函数,页面上有5个按钮,为什么没有效果[s:147][s:147]

 (2017-02-21 10:45) 
通过我的试出的结果,WM_SendMessageNoPara第一个参数应该是目标窗口的客户区句柄,窗口回调函数收到后,WM_SetFocusOnNextChild也应传入获取到的客户区句柄才行。
有时候不明白什么时候用pMsg->hWin,什么时候用WM_GetClientWindow(pMsg->hWin).很容易搞混
回复

使用道具 举报

6

主题

19

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2017-5-20 23:03:57 | 显示全部楼层

回 eric2013 的帖子

eric2013:聚焦不好用就发emWin自定义消息吧,在自定义消息路面,自己设置聚焦到那个控件,这样就可以完整按照自己的方式操作。
聚焦函数是WM_SetFocus
(2017-02-18 10:06)
请问:eric2013,根据emWin官方手册,按钮控件只是支持GUI_KEY_ENTER和GUI_KEY_SPACE两种按键消息,那么假如给有聚焦的按钮发送不支持的消息,如GUI_KEY_LEFT;它会不会不反应?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-5-21 00:36:43 | 显示全部楼层

回 robot_w 的帖子

robot_w:请问:eric2013,根据emWin官方手册,按钮控件只是支持GUI_KEY_ENTER和GUI_KEY_SPACE两种按键消息,那么假如给有聚焦的按钮发送不支持的消息,如GUI_KEY_LEFT;它会不会不反应?



....... (2017-05-20 23:03) 
这种按键不支持的消息,会进入到按钮所在父窗口回调函数的WM_KEY消息里面。
回复

使用道具 举报

6

主题

19

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2017-5-21 09:20:48 | 显示全部楼层

回 eric2013 的帖子

eric2013:这种按键不支持的消息,会进入到按钮所在父窗口回调函数的WM_KEY消息里面。 (2017-05-21 00:36)
谢谢eric2013给我的回复,按大侠所说,还是会执行GUI_KEY_LEFT这个消息对吧?还有假如GUI_KEY_LEFT这个消息执行的是WM_SetFocusOnPrevChild()功能,那么在一个对话框里面有按钮和编辑框的时候,当给聚焦的编辑框发送GUI_KEY_LEFT消息时,编辑框执行的是光标左移,还是WM_SetFocusOnPrevChild()功能呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-5-21 10:44:10 | 显示全部楼层

回 robot_w 的帖子

robot_w:谢谢eric2013给我的回复,按大侠所说,还是会执行GUI_KEY_LEFT这个消息对吧?还有假如GUI_KEY_LEFT这个消息执行的是WM_SetFocusOnPrevChild()功能,那么在一个对话框里面有按钮和编辑框的时候,当给聚焦的编辑框发送GUI_KEY_LEFT消息时,编辑框执行的是光标左移,还是WM_SetFocus .. (2017-05-21 09:20)
对于控件支持的消息,会自动被处理,而不会进入到WM_KEY里面。

控件不支持的消息会进入到WM_KEY回调消息里面。
回复

使用道具 举报

6

主题

19

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2017-5-21 23:32:14 | 显示全部楼层

回 eric2013 的帖子

eric2013:聚焦不好用就发emWin自定义消息吧,在自定义消息路面,自己设置聚焦到那个控件,这样就可以完整按照自己的方式操作。
聚焦函数是WM_SetFocus
(2017-02-18 10:06)
eric2013大侠,我有两个疑问:1、你上面给我回复的发emWin自定义消息,是指在case WM_KEY:下面自定义消息吗?你在电子版《安富莱STM32-V5开发板STemWin教程1-60期》的第31章键盘输入的309页程序注释的第2条说到自定义消息按键不成功!?那这样自定义消息不是实现不了吗?
2、自己设置聚焦到控件的编程思路是:先判断哪个按钮被聚焦?用WM_HasFocus()判断是吗?然后通过实体按键发送消息,最后再用WM_SetFocus设置聚焦到自己设置路径的另外按钮上。大侠的编程思路是怎样的?能给个建议吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-5-22 01:19:01 | 显示全部楼层

回 robot_w 的帖子

robot_w:eric2013大侠,我有两个疑问:1、你上面给我回复的发emWin自定义消息,是指在case WM_KEY:下面自定义消息吗?你在电子版《安富莱STM32-V5开发板STemWin教程1-60期》的第31章键盘输入的309页程序注释的第2条说到自定义消息按键不成功!?那这样自定义消息不是实现不了吗?
2、自己 .. (2017-05-21 23:32) 
1. 自定义消息是指的回调函数的消息类型,跟WM_PAINT,WM_KEY等是同级别的消息。

2. 不用判断,可以直接发自定义消息,完全自己控制。
回复

使用道具 举报

6

主题

19

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2017-5-22 23:36:06 | 显示全部楼层

回 eric2013 的帖子

eric2013:1. 自定义消息是指的回调函数的消息类型,跟WM_PAINT,WM_KEY等是同级别的消息。

2. 不用判断,可以直接发自定义消息,完全自己控制。 (2017-05-22 01:19)
首先,感谢eric2013百忙中给我回复,本人菜鸟,大侠第2点给我的建议,我还是不回编程实现!比如图示的第2条自己设定的路径:(2)DSP采样值→CPU采样值→相角显示→开入显示→退出;用一个实体按键发送WM_KEY_DOWN消息,表示在这条路径向下切换聚焦,按照大侠建议,直接发自定义消息。求大侠列举一些代码给我做示范?真不好意思,我问的太多了[s:129]
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-5-23 01:29:13 | 显示全部楼层
可以参考这个只能家居的例子:https://forum.anfulai.cn/forum.php?mod=viewthread&tid=5600
1. 首先是发送定义消息MSG_SetICONFocus
1.png



2. 然后进入到对话框的自定义回调消息MSG_SetICONFocus里面,在这个消息里面调用函数WM_SetFocus设置聚焦
我这里是聚到到ICON控件上了:
2.png
回复

使用道具 举报

6

主题

19

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2017-5-29 15:44:57 | 显示全部楼层

回 eric2013 的帖子

eric2013:可以参考这个只能家居的例子:https://forum.anfulai.cn/forum.php?mod=viewthread&tid=5600
1. 首先是发送定义消息MSG_SetICONFocus



....... (2017-05-23 01:29)
eric2013:祝你端午节快乐!按照大侠给的提示,我看了程序,又有好多疑问了:
1、按键k3是只按一次吗?让ICONVIEW实现聚焦是吧?
2、然后摇杆实现图标选项的移动,那么聚焦也跟着图标移动是吗?假如当前的图标在“灯光控制”,我按下摇杆DOMN键,为什么会准确落在“背景音乐”,而不会落在“安防报警”或其它图标上呢?程序在哪里体现呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-5-30 12:33:38 | 显示全部楼层

回 robot_w 的帖子

robot_w:eric2013:祝你端午节快乐!按照大侠给的提示,我看了程序,又有好多疑问了:
1、按键k3是只按一次吗?让ICONVIEW实现聚焦是吧?
2、然后摇杆实现图标选项的移动,那么聚焦也跟着图标移动是吗?假如当前的图标在“灯光控制”,我按下摇杆DOMN键,为什么会准确落在“背景音乐”,而 .. (2017-05-29 15:44)
1. 对的。
2. ICONVIEW有自己支持的按键消息,发送下面四种就可以实现上下左右移动了
88888888888888888888888.png
回复

使用道具 举报

6

主题

19

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2017-7-19 21:54:12 | 显示全部楼层

回 eric2013 的帖子

eric2013:可以参考这个只能家居的例子:https://forum.anfulai.cn/forum.php?mod=viewthread&tid=5600
1. 首先是发送定义消息MSG_SetICONFocus



....... (2017-05-23 01:29)
1、eric2013大侠,好久没发帖了!上次你建议给我的这个例子好是好,但我的初衷是建立一个框架窗口,然后在其上创建许多我图示的按钮控件,并未用到ICON控件呀!能否举其它例子吗?
2、在我提供的图示中,按钮控件旁边的箭头是怎样绘制的?是用2D图形库绘制吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-7-20 01:28:27 | 显示全部楼层

回 robot_w 的帖子

robot_w:1、eric2013大侠,好久没发帖了!上次你建议给我的这个例子好是好,但我的初衷是建立一个框架窗口,然后在其上创建许多我图示的按钮控件,并未用到ICON控件呀!能否举其它例子吗?
2、在我提供的图示中,按钮控件旁边的箭头是怎样绘制的?是用2D图形库绘制吗? (2017-07-19 21:54) 
直接创建按钮也可以的,这个ATM机的例子是否合适:https://forum.anfulai.cn/forum.php?mod=viewthread&tid=5595
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-19 17:27 , Processed in 0.057665 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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