硬汉嵌入式论坛

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

[emWin] 点击EDIT控件显示软键盘卡死

[复制链接]

22

主题

114

回帖

180

积分

初级会员

积分
180
发表于 2020-8-31 17:16:39 | 显示全部楼层 |阅读模式
刚开始显示几次的时候还是正常的,但点了十几次之后,界面就卡死了,不知是什么原因?切换到其他页面的时候也使用GUI_EndDialog关闭对话框了。
代码如下:
case WM_NOTIFY_PARENT:
  Id    = WM_GetId(pMsg->hWinSrc);
  NCode = pMsg->Data.v;
  switch(Id) {
  case ID_EDIT_0: // Notifications sent by 'Edit'
  switch(NCode) {
  case WM_NOTIFICATION_CLICKED:
  hItemNumPad = GUI_CreateDialogBox(_aDialogCreateNumPadPage, GUI_COUNTOF(_aDialogCreateNumPadPage), _cbDialogNumPadPage, WM_HBKWIN, 0, 0);
  break;
  case WM_NOTIFICATION_RELEASED:
  break;
  //      case WM_NOTIFICATION_VALUE_CHANGED:
  //        break;
  }
  break;
  case ID_EDIT_1: // Notifications sent by 'Edit'
  switch(NCode) {
  case WM_NOTIFICATION_CLICKED:
  WM_ShowWindow(hItemNumPad);
  break;
  case WM_NOTIFICATION_RELEASED:
  break;
  //      case WM_NOTIFICATION_VALUE_CHANGED:
  //        break;
  }
  break;
  case ID_EDIT_2: // Notifications sent by 'Edit'
  switch(NCode) {
  case WM_NOTIFICATION_CLICKED:
  WM_ShowWindow(hItemNumPad);
  break;
  case WM_NOTIFICATION_RELEASED:
  break;
  //      case WM_NOTIFICATION_VALUE_CHANGED:
  //        break;
  }
  break;
  case ID_EDIT_3: // Notifications sent by 'Edit'
  switch(NCode) {
  case WM_NOTIFICATION_CLICKED:
  WM_ShowWindow(hItemNumPad);
  break;
  case WM_NOTIFICATION_RELEASED:
  break;
  }
  break;
  case ID_EDIT_4: // Notifications sent by 'Edit'
  switch(NCode) {
  case WM_NOTIFICATION_CLICKED:
  WM_ShowWindow(hItemNumPad);
  break;
  case WM_NOTIFICATION_RELEASED:
  break;
  }
  break;
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115802
QQ
发表于 2020-9-1 00:55:32 | 显示全部楼层
卡死主要查看有没有重复创建,动态内存是否正常释放了以及对话框不断嵌套创建问题。
回复

使用道具 举报

2

主题

58

回帖

74

积分

初级会员

积分
74
发表于 2020-9-1 08:52:04 | 显示全部楼层
case ID_EDIT_0: 里面存在重复创建。

可以做个标志,判断键盘是否创建,防止反复创建它:

  1. case ID_EDIT_0: // Notifications sent by 'Edit'
  2. switch (NCode) {
  3. case WM_NOTIFICATION_CLICKED:


  4.     if (!NumPadCreateFlag) {
  5.         hItemNumPad = GUI_CreateDialogBox(_aDialogCreateNumPadPage, GUI_COUNTOF(_aDialogCreateNumPadPage), _cbDialogNumPadPage, WM_HBKWIN, 0, 0);

  6.         NumPadCreateFlag = 1;
  7.     }



  8.     break;
复制代码


回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-9-1 15:51:08 | 显示全部楼层
Jmhh247 发表于 2020-9-1 08:52
case ID_EDIT_0: 里面存在重复创建。

可以做个标志,判断键盘是否创建,防止反复创建它:

可以在创建主页面的时候就创建数字软键盘吗?创建后是隐藏状态,点击EDIT控件才显示出来,我试了一下在MainTask函数里创建,结果切换到别的页面就会闪屏
void f_MainTask(void) {
        WM_MULTIBUF_Enable(1);
    GUI_Init();
        hItemPage1 = GUI_CreateDialogBox(_aDialogCreatePage1, GUI_COUNTOF(_aDialogCreatePage1), _cbDialogPage1, WM_HBKWIN, 0, 0);
       
        hItemNumPad = GUI_CreateDialogBox(_aDialogCreateNumPadPage, GUI_COUNTOF(_aDialogCreateNumPadPage), _cbDialogNumPadPage, WM_HBKWIN, 0, 0);
        WM_SetStayOnTop(hItemNumPad, 1);
        WM_HideWindow(hItemNumPad);
        while(1){

           GUI_Delay(50);
          
   }
}
回复

使用道具 举报

2

主题

58

回帖

74

积分

初级会员

积分
74
发表于 2020-9-1 21:08:47 | 显示全部楼层
zxc19970106 发表于 2020-9-1 15:51
可以在创建主页面的时候就创建数字软键盘吗?创建后是隐藏状态,点击EDIT控件才显示出来,我试了一下在Ma ...

按说应该不会闪才对,键盘毕竟也是个普通窗口。

具体还是要自己排查下。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-19 14:45 , Processed in 0.254920 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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