搜索
bottom↓
回复: 10

请教STemWin实体按键如何传入驱动API?

[复制链接]

出0入0汤圆

发表于 2014-5-21 21:01:04 | 显示全部楼层 |阅读模式
本帖最后由 styleno1 于 2014-5-22 11:59 编辑

汗颜,手册上愣是没找到明白的说明。

请各位一键点破!

思路说明:

一个进程键盘检测,一个进程GUI_Exec(),按下按键,发出键值,GUI进程调用初始化传递的Callback响应。

编辑说明:补充

出0入0汤圆

 楼主| 发表于 2014-5-26 16:40:45 | 显示全部楼层
本帖最后由 styleno1 于 2014-5-26 16:46 编辑

听从了同事的建议,改为MDK带的emWin,无此问题,正常工作,提醒诸位小心使用。结贴。

注:帖子所选答案并非症结所在。

编辑说明:补充

出0入0汤圆

发表于 2014-5-21 21:01:05 | 显示全部楼层
GUI_StoreKeyMsg(GUI_KEY_ENTER, 1);
很简单明了,LZ自由发挥想象力具体怎么用

出0入0汤圆

 楼主| 发表于 2014-5-21 22:35:47 | 显示全部楼层
dalarang 发表于 2014-5-21 21:08
GUI_StoreKeyMsg(GUI_KEY_ENTER, 1);
很简单明了,LZ自由发挥想象力具体怎么用

哦,是外部来扫描啊,我还在琢磨怎么和触屏不一样。马上试试!

出0入0汤圆

 楼主| 发表于 2014-5-22 12:02:24 | 显示全部楼层
dalarang 发表于 2014-5-21 21:08
GUI_StoreKeyMsg(GUI_KEY_ENTER, 1);
很简单明了,LZ自由发挥想象力具体怎么用

没有触发回调函数,还差点什么?

  1. hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
复制代码


出0入0汤圆

 楼主| 发表于 2014-5-23 17:06:09 | 显示全部楼层

  1. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
  2. {
  3.         { FRAMEWIN_CreateIndirect, "Edit winmode", 0,         90,  90, 140, 130, FRAMEWIN_CF_MOVEABLE},
  4.         { EDIT_CreateIndirect,     NULL,     GUI_ID_EDIT0,    10,  10, 110,  20, 0, 15},
  5.         { EDIT_CreateIndirect,     NULL,     GUI_ID_EDIT1,    10,  40, 110,  20, 0, 15},
  6.         { BUTTON_CreateIndirect,   "Ok",     GUI_ID_OK,       10,  80,  50,  20 },
  7.         { BUTTON_CreateIndirect,   "Cancel", GUI_ID_CANCEL,   70,  80,  50,  20 },
  8. };
复制代码


回调函数:
  1. static void _cbDialog(WM_MESSAGE * pMsg)
  2. {
  3.         int     i;
  4.         int     NCode;
  5.         int     Id;
  6.         WM_HWIN hDlg;
  7.         WM_HWIN hItem;

  8.         hDlg = pMsg->hWin;
  9.         switch (pMsg->MsgId)
  10.         {
  11.                 case WM_INIT_DIALOG:
  12.                         FRAMEWIN_SetFont(pMsg->hWin, &GUI_Font13_ASCII);
  13.                         FRAMEWIN_SetTextAlign(pMsg->hWin, GUI_TA_HCENTER);
  14.                         for (i = 0; i < 2; i++)
  15.                         {
  16.                                 hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT0 + i);  // Get the handle of the edit widget
  17.                                 EDIT_AddKey(hItem, GUI_KEY_ADD);
  18.                                 EDIT_SetText(hItem, "Hello world!");             // Fill widget with text
  19.                                 EDIT_SetSel(hItem, 0, -1);                       // Select the whole contents of the edit field
  20.                         }
  21.                         break;
  22.                  case WM_KEY:
  23.             switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
  24.             {
  25.                                 case GUI_KEY_ESCAPE:
  26.                     GUI_EndDialog(hDlg, 1);
  27.                     break;
  28.                                
  29.                 case GUI_KEY_ENTER:
  30.                     GUI_EndDialog(hDlg, 0);
  31.                     break;
  32.             }
  33.             break;
  34.                 case WM_NOTIFY_PARENT:
  35.                         Id    = WM_GetId(pMsg->hWinSrc);      // Id of widget
  36.                         NCode = pMsg->Data.v;                 // Notification code
  37.                         switch (NCode)
  38.                         {
  39.                                 case WM_NOTIFICATION_RELEASED:      // React only if released
  40.                                         if (Id == GUI_ID_OK)
  41.                                         {         // OK Button
  42.                                                 GUI_EndDialog(hDlg, 0);
  43.                                         }
  44.                                         if (Id == GUI_ID_CANCEL)
  45.                                         {        // Cancel Button
  46.                                                 GUI_EndDialog(hDlg, 1);
  47.                                         }
  48.                                        
  49.                                         break;
  50.                         }
  51.                         break;
  52.                 default:
  53.                         WM_DefaultProc(pMsg);
  54.         }
  55. }
复制代码


任务循环代码:
  1. GUI_Delay(10);
复制代码


按键发送:
  1. GUI_SendKeyMsg(GUI_KEY_ESCAPE, 1);
复制代码


补充描述:

发送按键,没有触发回调函数:WM_KEY。

出0入0汤圆

发表于 2014-5-24 09:39:25 | 显示全部楼层
  1. int WM_SetFocus(WM_HWIN hWin));
复制代码

出0入0汤圆

 楼主| 发表于 2014-5-26 15:21:17 | 显示全部楼层

尚未解决,提供更多细节:
使用WM_SetFocus()/WM_HasFocus(),以及图形表现证实确实焦点设置成功。
然而调用GUI_SendKeyMsg()仍无法发出消息,分析汇编时,判定当前非零句柄时,值仍为零,跳出。


[多任务系统]




疑问:看来他们不是对应一个局部变量,还缺少什么?
(回顾了uC/Gui 3.98的源码,它用的是同一个局部变量)





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-5-26 18:45:02 | 显示全部楼层
styleno1 发表于 2014-5-26 15:21
尚未解决,提供更多细节:
使用WM_SetFocus()/WM_HasFocus(),以及图形表现证实确实焦点设置成功。
然而 ...
  1. hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  2. WM_SetFocus(hWin)
复制代码

出0入0汤圆

发表于 2017-1-1 09:21:54 | 显示全部楼层
emwin外部按键的处理问题, 到时试试看看

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-20 04:50

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

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