搜索
bottom↓
回复: 10

UCGUI消息框无法接收键盘消息,求指点。。。

[复制链接]

出0入0汤圆

发表于 2014-12-29 22:08:39 | 显示全部楼层 |阅读模式
最近写个界面要用到UCGUI的模态对话框,而且必须要阻塞,原本以为很简单:单击窗口中的某个OK按钮,会弹出一个MESSAGE消息框,如果不关闭此消息框,是不能操作其它窗口的,而且进程也会被阻塞在此。于是我就在某个窗口的消息里加了创建消息框的操作(有必要提一下:我没有使用触摸,全部使用按键操作,所有窗口上的按钮控件可以使用按键的TAB键来切换):
case WM_NOTIFY_PARENT:
    if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) {
      Id = WM_GetId(pMsg->hWinSrc);
      if(Id == GUI_ID_OK)
      GUI_MessageBox("Error Message", "Error", GUI_MESSAGEBOX_CF_MODAL);
        WM_SetFocus(hpWin);
        }
    break;
编译。。。。下载。。。。。按键操作触发。。。。。。如我所愿,FRAMEWIN框架的消息框可以正常弹出。。。。。。。但是接下来就不能操作了,可以清楚的看到焦点已经聚焦到了消息框的“OK”按钮上,我猛戳键盘上的“确定按钮”想把它关掉,但毫无反应,此时的消息框就像一潭死水。。。。。。死机了??不可能呀,应为时间还在走。。。。。“多对话框问题”??貌似UCGUI3.98已经没这个问题了??
搞了一上午,还是没搞定。。。。。。算了,自己写个对话框弹出来看看。。。。。。。。不用FRAMEWIN框框,就用普通的窗口,简单点。。。。如下:
/*********************************************************************
*
*       MessageBox消息框回掉
*/
static void cbMessageBox(WM_MESSAGE * pMsg) {
        int     Id, NCode;
      GUI_RECT r;
   switch (pMsg->MsgId) {
          case WM_PAINT:
          GUI_SetBkColor(GUI_WHITE);
         GUI_SetColor(GUI_BLACK);
         WM_GetClientRect(&r);
        GUI_ClearRectEx(&r);
      break;                       
    case WM_KEY:
        switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) {
             case KB_Left:   WM_SetFocusOnPrevChild(pMsg->hWin);break;//左键前移
            case KB_Right:  WM_SetFocusOnNextChild(pMsg->hWin);break;//右键后移
         }
       break;
      case WM_NOTIFY_PARENT:
           Id = WM_GetId(pMsg->hWinSrc);
          NCode = pMsg->Data.v;
          switch(NCode){
         case WM_NOTIFICATION_RELEASED:
             if(Id == GUI_ID_OK)
                GUI_EndDialog(pMsg->hWin,0);
              break;                               
           }
       break;
    default:
    WM_DefaultProc(pMsg);
  }
}


/*********************************************************************
*
*  创建MESSAGEBOX
*/
void ShowMessageBox(WM_HWIN hParent,            //父窗口
                                 WM_CALLBACK* Callback,     //回掉
                         const char * pText,             //消息框内容
                    )      
{
  WM_HWIN hClient;
  WM_HWIN hWin;
  WM_HWIN hBut;
  //创建WIN
  hWin = WM_CreateWindowAsChild(10, 10, 100, 60, hParent, WM_CF_SHOW,Callback, 0 );
  
   hClient = WM_GetClientWindow(hWin);
  TEXT_CreateEx(10, 5, 80, 30, hClient, WM_CF_SHOW, GUI_TA_HCENTER, 0, pText);
   hBut = BUTTON_CreateEx(5, 30, 30, 18, hClient, WM_CF_SHOW, 0, GUI_ID_CANCEL);
   BUTTON_SetText(hBut, "No");
   hBut = BUTTON_CreateEx(50, 30, 30, 18, hClient, WM_CF_SHOW, 0, GUI_ID_OK);
   BUTTON_SetText(hBut, "Yes");
   
    WM_SetFocusOnNextChild(hWin);//定位焦点
    WM_MakeModal(hWin);//模态
   GUI_ExecCreatedDialog(hWin); //阻塞窗口(加上这句,消息框无法接受键盘消息,去掉这句就正常)
}

然后调用 ShowMessageBox(0, cbMessageBox,   "Error Message");消息框也可以正常弹出来。。。。但键盘一样不起作用。。。。。
快崩溃了。。。。。。。耐着性子继续折腾。。。。。。。。把 GUI_ExecCreatedDialog(hWin); //阻塞窗口
这句去掉,再试。。。。。。哎。。。。这回行了。。。。。去掉了阻塞窗口属性后,消息框可以接收键盘消息了,可以按键盘的确定按钮关闭消息框了,
虽然消息框可以通过键盘控制了,但它却不是阻塞的了。。。。。这不是我想要的结果。

那位高人出来帮忙指点指点???GUI这东西想要搞的出彩点,确实不是那么简单。。。。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-12-29 22:42:45 | 显示全部楼层
楼主你说简单点,看到这么长就不想看下去了。你想要实现什么效果,弹出窗体然后禁止背景窗体操作是吗?

出0入0汤圆

 楼主| 发表于 2014-12-30 09:14:43 | 显示全部楼层
无触摸。。。。要求弹出一个消息框,按键盘"确定"键再关闭此消息框。。。。。。

出0入0汤圆

发表于 2014-12-30 13:27:43 | 显示全部楼层
天马行空 发表于 2014-12-30 09:14
无触摸。。。。要求弹出一个消息框,按键盘"确定"键再关闭此消息框。。。。。。 ...

触摸的我做过,按键的没搞过,最近正在搞。

出0入0汤圆

发表于 2019-3-17 19:53:58 | 显示全部楼层
楼主这个问题 解决了吗?
我现在也遇到这个问题,确实好郁闷啊。

出0入0汤圆

发表于 2019-3-18 11:26:13 | 显示全部楼层
我碰到你们的问题差不多。只是后面关掉窗口后,弹出前的窗口焦点没有了。

出0入0汤圆

发表于 2020-8-14 15:47:43 | 显示全部楼层
2020的我同样遇到这个问题,不知道怎么解决啊,大佬,不知道过这么久,你还记得当初有没有解决

出150入135汤圆

发表于 2020-8-16 15:24:22 | 显示全部楼层
郭白白 发表于 2020-8-14 15:47
2020的我同样遇到这个问题,不知道怎么解决啊,大佬,不知道过这么久,你还记得当初有没有解决 ...


http://www.neqee.com/ewinstd/emw ... 的使用方法.pdf

出0入0汤圆

发表于 2020-8-19 16:30:14 | 显示全部楼层
neqee 发表于 2020-8-16 15:24
http://www.neqee.com/ewinstd/emwin%202-day%20quick%20tutorial%20014_实体键盘消息的使用方法.pdf
...

大佬,按键消息能发送成功,其他界面的控件也能响应。但是,messagebox下的消息不能响应,按下去无效,用模拟器模拟的是可以执行的

出150入135汤圆

发表于 2020-8-20 03:48:57 来自手机 | 显示全部楼层
郭白白 发表于 2020-8-19 16:30
大佬,按键消息能发送成功,其他界面的控件也能响应。但是,messagebox下的消息不能响应,按下去无效,用 ...

是不是阻塞的时候没调用到键盘扫描以及储存键码给emwin了?

出0入0汤圆

发表于 2020-8-20 08:51:48 | 显示全部楼层
neqee 发表于 2020-8-20 03:48
是不是阻塞的时候没调用到键盘扫描以及储存键码给emwin了?

阻塞情况下,是不是有什么特殊的地方,我用模态对话框,也接受不到按键的消息
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-3 18:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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