硬汉嵌入式论坛

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

[emWin] 实体按键问题

[复制链接]

4

主题

8

回帖

20

积分

新手上路

积分
20
发表于 2016-1-8 12:13:10 | 显示全部楼层 |阅读模式
请问有没有一种方法在emwin中实现实体按键对应一个button控键?而不用使用TAB切换。这样是为了实现触摸和实体按键都能操控。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2016-1-9 11:20:24 | 显示全部楼层
那就没有必要对应button了,直接用实体按键给所需要的控件发数据即可。比如外接个数字键盘,直接把数据发给所需要的控件。
回复

使用道具 举报

4

主题

8

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2016-1-11 21:21:27 | 显示全部楼层
因为有时怕触摸按键不灵。比如液晶屏上有水了,可能就会导致触摸按键不灵,因此这时候还可以用实体按键莱进行操作。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2016-1-13 09:34:43 | 显示全部楼层

回 shanfeng000 的帖子

shanfeng000:因为有时怕触摸按键不灵。比如液晶屏上有水了,可能就会导致触摸按键不灵,因此这时候还可以用实体按键莱进行操作。 (2016-01-11 21:21) 
也可以一个按键对于一个button,让按键给相应的button发自定义消息。然后就执行button里面设置的消息。

其实有些多余了,你可以button直接给控件发消息,实体按键也是直接给控件发消息。
回复

使用道具 举报

4

主题

8

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2016-1-20 11:00:17 | 显示全部楼层
加入了自定义消息        case JOY_DOWN_R:
                        GUI_SendKeyMsg(35, 1);
                        GUI_SendKeyMsg(GUI_KEY_ENTER, 1);
                        break;
                    case JOY_DOWN_OK:
                        GUI_SendKeyMsg(36, 1);
                        GUI_SendKeyMsg(GUI_KEY_ENTER, 1);
                        break;        

消息处理:
        case WM_KEY:
            if (((const WM_KEY_INFO *)(pMsg->Data.p))-&gtressedCnt > 0)
            {
                Key = ((const WM_KEY_INFO *)(pMsg->Data.p))->Key;
                switch(Key)
                {
                    case 35:
                        hItem = WM_GetDialogItem(hWin, ID_BUTTON_1);
                        WM_SetFocus(hItem);
                        break;
                    case 36:
                        hItem = WM_GetDialogItem(hWin, ID_BUTTON_2);
                        WM_SetFocus(hItem);
                        break;
                }
            }
            break;

发现焦点一直聚焦在 ID_BUTTON_0上,切换不到 ID_BUTTON_1上。
回复

使用道具 举报

4

主题

8

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2016-1-20 11:33:18 | 显示全部楼层
用自定义消息也不行。只能在ID_BUTTON_1上动作,ID_BUTTON_2上没有动作。
        case WM_KEY:
            if (((const WM_KEY_INFO *)(pMsg->Data.p))-&gtressedCnt > 0)
            {
                Key = ((const WM_KEY_INFO *)(pMsg->Data.p))->Key;
                switch(Key)
                {
                    case 35:
                        WM_SendMessageNoPara(hWin, Button1IsPressed);
                        WM_InvalidateWindow(hWin);
                        break;
                    case 36:
                        WM_SendMessageNoPara(hWin, Button2IsPressed);
                        WM_InvalidateWindow(hWin);
                        break;
                }
            }
            break;

        case Button1IsPressed:
            Power=Power+20;
            if(Power>100)Power=100;
            WM_InvalidateWindow(hWin);
            break;
        case Button2IsPressed:
                Power=Power-10;
                if(Power<10)Power=10;
                WM_InvalidateWindow(hWin);
            break;
回复

使用道具 举报

4

主题

8

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2016-1-25 09:17:49 | 显示全部楼层
已经解决了。就是将notifparent 里面的代码放到wm KEY里就可以了。然后每个按键响应加个SETfoucus。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-13 06:35 , Processed in 0.446195 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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