硬汉嵌入式论坛

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

[emWin] 更改edit控件的

[复制链接]

8

主题

11

回帖

35

积分

新手上路

积分
35
发表于 2019-6-3 10:57:18 | 显示全部楼层 |阅读模式
123456.png
大家好,我在窗口上建立3个编辑框,使用实体按键。我想做成的效果是
1、按上下键能够在三个编辑框之间来回切换
2、按下“确认键”就进入某一个编辑框,然后再按上下键更改编辑框的数值大小,按下返回键就从当前编辑框退出,然后执行1中的操作

请问这个该如何实现呢?请各位知道的大佬给个思路啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107970
QQ
发表于 2019-6-3 11:02:57 | 显示全部楼层
回复

使用道具 举报

8

主题

11

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2019-6-5 09:49:47 | 显示全部楼层
eric2013 发表于 2019-6-3 11:02
这个章节配套的例子就行

http://www.armbbs.cn/forum.php?mod=viewthread&tid=27749&highlight=%CA%B ...

版主,我参照ATM机的例程在一步步实现,思路还是有点问题,下面是我设置界面的代码。
1、按上下键能够在三个编辑框之间来回切换
2、按下“确认键”就进入某一个编辑框,然后再按上下键更改编辑框的数值大小,按下返回键就从当前编辑框退出,然后执行1中的操作。

static void _cbSetView(WM_MESSAGE* pMsg)
{
        WM_HWIN hWin = pMsg->hWin;
        switch (pMsg->MsgId)
        {
                case WM_CREATE:
                WM_SetFocus(hWin);//设置聚焦
                _CreateEdit(hWin, ID_EDIT(0), 109,  45, 40, 25, "123");
                _CreateEdit(hWin, ID_EDIT(1), 109,  90, 40, 25, "456");
                _CreateEdit(hWin, ID_EDIT(2), 109,150, 40, 25, "789");
                break;
                case WM_KEY:
                switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
                {
                        case GUI_KEY_ESCAPE:
                        break;
                        case GUI_KEY_BACKTAB:       
                        WM_SetFocusOnPrevChild(hWin);
                        break;
                        case GUI_KEY_TAB:
                        WM_SetFocusOnNextChild(hWin);
                        break;
                       
                        case GUI_KEY_ENTER://按下实体按键的确定键时,进入当前聚焦的编辑框,然后再按上下键更改数值。
                        这里该怎么做呢?
                        break;
                       
                        //菜单键,直接返回主界面
                        case GUI_KEY_RIGHT:
                        _DeleteFrame();//删除当前窗口
                        _CreateFrame(&_cbMainView);//直接进入检测界面
                        break;
                }
                break;
               
                //窗口变为无效并应重绘时,发送到窗口
                case WM_PAINT:_PaintFrame();        break;
               
                case WM_NOTIFY_PARENT://告知父窗口,其子窗口中发生了某些改变
                if (pMsg->Data.v == WM_NOTIFICATION_RELEASED)
                {
                        int Id = WM_GetId(pMsg->hWinSrc);//获取控件ID
                        switch (Id)
                        {
                                case GUI_ID_BUTTON0:
                                break;
                                case GUI_ID_BUTTON1:
                                break;
                                case GUI_ID_BUTTON2:
                                break;
                                default:break;
                        }   
                }
                break;
                case WM_TIMER:                                        break;
                default:WM_DefaultProc(pMsg);        break;
        }
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107970
QQ
发表于 2019-6-6 10:05:42 | 显示全部楼层
雅虎9527 发表于 2019-6-5 09:49
版主,我参照ATM机的例程在一步步实现,思路还是有点问题,下面是我设置界面的代码。
1、按上下键能够在 ...

下面这个地方
case GUI_KEY_ENTER://按下实体按键的确定键时,进入当前聚焦的编辑框,然后再按上下键更改数值。
                        这里该怎么做呢?
                        break;

你获取下当前EDIT控件的句柄就行,方便后面上下键修改数值,是否可行。
回复

使用道具 举报

8

主题

11

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2019-6-6 13:29:41 | 显示全部楼层
本帖最后由 雅虎9527 于 2019-6-6 14:21 编辑
eric2013 发表于 2019-6-6 10:05
下面这个地方
case GUI_KEY_ENTER://按下实体按键的确定键时,进入当前聚焦的编辑框,然后再按上下键更 ...

先谢谢版主,我后来在_cbSetView的KEY消息下下面加了这两句
case GUI_KEY_ENTER:// hEdit[0]是我在创建编辑框时得到的句柄
WM_SetFocus(hEdit[0]);
WM_SetCallback(hEdit[0],_cbEdit);//cbEdit是编辑框的回调函数
break;

//编辑框回调函数
static void _cbEdit(WM_MESSAGE * pMsg)
{
        WM_HWIN hWin = pMsg->hWin;
        switch (pMsg->MsgId)
        {
                case WM_KEY:
                switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
                {
                        case GUI_KEY_ESCAPE:
                        break;

                        case GUI_KEY_UP:        
                        a++;
                        break;

                        case GUI_KEY_DOWN:
                        a--;
                        break;
                        
                        case GUI_KEY_LEFT:     //在这里执行退出当前编辑框,此时焦点该如何重新设置呢?因为现在按键始终在这个回调函数里面响应
                        WM_SetFocus(hWin);       //我本意是想在编辑框的回调函数里按下确认键后,再按上下键就能又在三个编辑框里来回切换,但是这一句并不能实现我想要的结果。                                                break;
              
                }
                break;
        }
        //EDIT_Callback(pMsg);//自带的回调函数
}

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-21 02:26 , Processed in 0.188717 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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