硬汉嵌入式论坛

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

[emWin] 【输入焦点问题】关闭子窗口后,输入聚焦不在父窗口,活动窗口句柄为0

[复制链接]

7

主题

24

回帖

45

积分

新手上路

积分
45
发表于 2021-6-25 15:26:26 | 显示全部楼层 |阅读模式
我新建了一个对话框,在此基础上新建了一个子对话框,然而关闭后子对话框后,父窗口输入焦点丢失,此时活动窗口句柄为0,需要重新定位焦点到父窗口。在回调函数里面处理,但是会卡死进入硬件错误,有没有好的解决办法?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-6-25 22:05:37 | 显示全部楼层
方便的话,发代码看下。
回复

使用道具 举报

2

主题

49

回帖

55

积分

初级会员

积分
55
发表于 2021-6-26 08:44:48 | 显示全部楼层
我打开gui_messagebox再关闭,主界面就失去焦点了. 始终感觉emwin对实体按键输入的支持有问题.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-6-26 09:03:12 | 显示全部楼层
jiaoxiake 发表于 2021-6-26 08:44
我打开gui_messagebox再关闭,主界面就失去焦点了. 始终感觉emwin对实体按键输入的支持有问题.

emWin的聚焦确实不太好用,需要关闭后,重新设置到支持聚焦的窗口或者控件上。
回复

使用道具 举报

7

主题

24

回帖

45

积分

新手上路

积分
45
 楼主| 发表于 2021-6-26 10:53:38 | 显示全部楼层
eric2013 发表于 2021-6-25 22:05
方便的话,发代码看下。

static void _cbChildDialog(WM_MESSAGE *pMsg)
{
        WM_HWIN hItem;
        WM_HWIN hDlg;
        int Id;
        int NCode;

        hDlg = pMsg->hWin;
        switch(pMsg->MsgId)
        {
                /* ɾ³ýÒ³ÃæÏûϢ֪ͨ */
                case WM_DELETE:
                    hItem = WM_GetParent(hDlg);
                                WM_SetFocus(hWindow1);  /* ɾ³ý×Ó´°¿Ú,֪ͨ¸¸´°¿ÚÖØо۽¹ */
                  break;
               
                /* ×Ó¶Ô»°¿ò³õʼ»¯ */
                case WM_INIT_DIALOG:
                        /* FrameÊôÐÔÉèÖÃ */
                        hItem = pMsg->hWin;                  //Ä¿±ê´°¿Ú¾ä±ú
                        FRAMEWIN_SetSkinClassic(hItem);  //ÉèÖþ­µäƤ·ô
                        FRAMEWIN_SetTitleHeight(hItem, 32);
                        FRAMEWIN_SetBarColor(hItem, 1, GUI_BLUE_98);
                        FRAMEWIN_SetBarColor(hItem, 0, GUI_GRAY);
                        FRAMEWIN_SetFont(hItem, GUI_FONT_32_1);
                        FRAMEWIN_SetText(hItem, "constraint");
                        /* °´Å¥0³õʼ»¯ */
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_Button_0);
                        BUTTON_SetText(hItem, "ok");
                  BUTTON_SetFocussable(hItem, 1);
                        /* °´Å¥1³õʼ»¯ */
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_Button_1);
                        BUTTON_SetText(hItem, "cancel");
                  BUTTON_SetFocussable(hItem, 1);
                  break;
               
                /* emWIN_KEY°´¼üÏûÏ¢ */
                case WM_KEY:
                  switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
                        {
                                case GUI_KEY_ENTER:
                                          hItem = WM_GetDialogItem(pMsg->hWin, ID_Button_0);
                                          BUTTON_SetPressed(hItem, 1);
                                  break;
                          case GUI_KEY_ESCAPE:
                                          GUI_EndDialog(hDlg, 1);  /* ¹Ø±Õ */
                                    focuswindow_flag = 1;    /* ´°¿Ú¾Û½¹±ê־λ */
                                    hfocuswindow = hDlg;     /* ¼Ç¼¾Û½¹´°¿Ú¾ä±ú */
                                  break;  
                        }
                  break;
                       
    /* emWIN_NOTIFY×Ó´°¿Úϵͳ֪ͨÏûÏ¢ */
                case WM_NOTIFY_PARENT:
                                Id = WM_GetId(pMsg->hWinSrc);  /* »ñÈ¡¿Ø¼þID */
                                NCode = pMsg->Data.v;  /* »ñȡϵͳ֪ͨ´úÂë */
                                switch (NCode)
                                {
                                        case WM_NOTIFICATION_CHILD_DELETED:
              /* USER_CODE */
                                                break;
                                }  /* end of switch->NCode */
                  break;
                               
                /* emWINĬÈÏ´¦Àí */
                default:
                  WM_DefaultProc(pMsg);
                        break;
        }
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-6-26 11:00:20 | 显示全部楼层
甜瓜 发表于 2021-6-26 10:53
static void _cbChildDialog(WM_MESSAGE *pMsg)
{
        WM_HWIN hItem;

方便贴个可以在模拟器上运行的代码吗,否则没法调试。
回复

使用道具 举报

7

主题

24

回帖

45

积分

新手上路

积分
45
 楼主| 发表于 2021-6-26 11:03:28 | 显示全部楼层
eric2013 发表于 2021-6-25 22:05
方便的话,发代码看下。

谢谢硬汉哥,解决了,在删除子窗口后,我在 case WM_DELETE: 分支里面聚焦窗口,发现失败了。后来改成父窗口里面的控件,成功解决。手册说是窗口不接受输入聚焦,应该是这点的原因把。
回复

使用道具 举报

0

主题

10

回帖

10

积分

新手上路

积分
10
发表于 2022-10-26 17:07:10 | 显示全部楼层
甜瓜 发表于 2021-6-26 11:03
谢谢硬汉哥,解决了,在删除子窗口后,我在 case WM_DELETE: 分支里面聚焦窗口,发现失败了。后来改成父 ...

有关键代码吗?我想看看,遇到了同样的问题,子窗口通过按键退出后,父窗口不响应按键
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2022-10-27 01:05:05 | 显示全部楼层
Javen 发表于 2022-10-26 17:07
有关键代码吗?我想看看,遇到了同样的问题,子窗口通过按键退出后,父窗口不响应按键

要设置到父窗口上支持聚焦的控件上。

看下此贴

关于emWin控件,窗口,对话框等聚焦问题总结
https://www.armbbs.cn/forum.php? ... 2182&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 15:36 , Processed in 0.362578 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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