打印
[ARM入门]

emWin(ucGUI)中,FRAMEWIN与WINDOW之区别与焦点问题

[复制链接]
10059|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TECHWELL|  楼主 | 2015-5-17 13:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 TECHWELL 于 2015-5-17 22:50 编辑

    我仿照emWin提供的范例,编写了一个“软键盘”。当用户点击EDIT控件时,弹出“软键盘”,用户即可对EDIT输入。
并且期望我的“软键盘”是能“拖动”的。
   “软键盘”中,安排了一个Tab按键,用户完成对当前的EDIT输入之后,按Tab键,把输入焦点转移到一下个EDIT,
以方便用户继续对下一个EDIT输入。不必先关闭“软键盘”,再点击下一个EDIT,再弹出“软键盘”...如果“软键盘”遮挡
了下一个EDIT,用户可以拖开“软键盘”后,继续对EDIT输入。
    emWin提供的“软键盘”范例中(AN03002_Custom_Widget_Type.pdf,在Keil MDK的安装文件夹中可找到它),是在
WINDOW中创建多个BUTTON,得以实现的。
    范例中,WINDOW中的各BUTTON被BUTTON_SetFocussable(hItem, 0)函数,剥夺了“焦点”权利,“软键盘”弹出之后,
系统的输入焦点,仍然在被输入的EDIT控件之上。或者说,点击“软键盘”中的BUTTON,BUTTON不会“吸取”输入焦点。
Tab功能也就自然地实现了。
    但是,emWin中,用户不能通过Mouse或者TouchPad拖动WINDOW(WINDOW控件,没这个功能或者属性)。这样的话,
emWin提供的“软键盘”,对用户而言,是不可拖动的。这不符合我的要求。
    于是,我想到了FRAMEWIN,它有标题栏,是可以“拖动”的。看起来,问题解决了。
    但是新问题来了。emWin中,没有FRAMEWIN_SetFocussable(hItem, 0)函数,剥夺其“焦点”权利。尽管BUTTON本
身,已经被禁止吸取焦点。但是点击FRAMEWIN中的BUTTON时,FRAMEWIN却“吸取”了输入焦点,使得当前正在被输入的EDIT
失去了焦点。“软键盘”中的Tab功能,也就无法实现了。
   请您支招,谢谢!
  也可Q我:396936661

SimulationTrial.zip

1.64 MB

相关帖子

沙发
TECHWELL|  楼主 | 2015-5-17 23:55 | 只看该作者
解决了!
在回调函数中,响应WM_TOUCH消息即可:
case WM_TOUCH:
          {const GUI_PID_STATE * pState;
           pState = (const GUI_PID_STATE *)pMsg->Data.p;
           if (pState)
            { if (pState->Pressed)
              {  WM_SetCaptureMove(hDlg, pState, 0, 0);
              }
            }
          }
          break;

SimulationTrial.zip

1.64 MB

使用特权

评论回复
板凳
ayisitelv| | 2015-7-29 17:42 | 只看该作者
楼主,请问下你的edit弹出软键盘做成功了吗?我也在做这个,从软键盘输入新值到edit总是无法实现,你是通过什么实现的?edit_getfloatvalue()可以吗?

使用特权

评论回复
地板
a43770| | 2015-9-8 15:24 | 只看该作者
ayisitelv 发表于 2015-7-29 17:42
楼主,请问下你的edit弹出软键盘做成功了吗?我也在做这个,从软键盘输入新值到edit总是无法实现,你是通过 ...

我的做法是定义一个EDIT_Handle Cd_edit_handle;        // 全局edit句柄
然后在点击编辑框时
case WM_NOTIFICATION_RELEASED:
            switch (Id) {

          case GUI_ID_EDIT0:
          hItem = GUI_CreateDialogBox(_aDialogNumPad, GUI_COUNTOF(_aDialogNumPad),
                                                           &_cbDialogNumPad, 0, 0, 0);
          WM_SetStayOnTop(hItem, 1);
          Cd_edit_handle = WM_GetDialogItem(hDlg,GUI_ID_EDIT0);
          break;
        }
把控件句柄赋予全局句柄
最后在软键盘中
case GUI_ID_BUTTON1:
    EDIT_AddKey(Cd_edit_handle, '1');   
    break;
输入

使用特权

评论回复
5
baonng| | 2015-11-9 13:52 | 只看该作者
我现在也做了个FRAMEWIN窗口,上面有两个Edit和一个全键盘,初始化时聚焦到一个Edit上,通过触摸屏切换Edit,但是一旦切换,程序会进入HardFault_Handler,还没找到问题,参考下你的吧。

使用特权

评论回复
6
被解救的戈登| | 2016-1-31 15:03 | 只看该作者
楼主请问如何控制FRAMEWIN窗口框架一直处于底层啊,我的窗口框架和按钮是一起创建的,但是一点屏幕的非按钮窗口框架部分,FRAMEWIN总是把其他的控件覆盖掉!!
static const GUI_WIDGET_CREATE_INFO _aDialogA[] = {
     { WINDOW_CreateIndirect,    "",                    0,                  0,   0, 800, 480, 0},
    { FRAMEWIN_CreateIndirect,  "Pressure",           ID_ICP,     0,  0, 800, 480,  0},
    { BUTTON_CreateIndirect,    "up",                GUI_ID_BUTTON0,          106,68, 141,52},
    { BUTTON_CreateIndirect,    "down",              GUI_ID_BUTTON1,          106,146,141,52},
    { BUTTON_CreateIndirect,    "begin",             GUI_ID_BUTTON2,          106,224,141,52},
    { BUTTON_CreateIndirect,    "stop",              GUI_ID_BUTTON3,          106,304,141,52},
    { BUTTON_CreateIndirect,    "back",              GUI_ID_BUTTON4,          15,374,50,50},
    //{ DROPDOWN_CreateIndirect,  "Frequency",         GUI_ID_DROPDOWN0,        95, 259,174,80},
    { PROGBAR_CreateIndirect,    "",                GUI_ID_PROGBAR0,         364,309,351,47},
    { EDIT_CreateIndirect,       NULL,               GUI_ID_EDIT1,            743,38, 39, 30},
    { TEXT_CreateIndirect,      "HZ",                GUI_ID_TEXT0,            527,180,57, 40},
    //{ EDIT_CreateIndirect,      "1",                 GUI_ID_EDIT0,            397,161,124,59},
    { EDIT_CreateIndirect,       NULL,               GUI_ID_EDIT2,            688,38, 39, 30},
    { MULTIEDIT_CreateIndirect, "MULTIEDIT",         GUI_ID_MULTIEDIT0,       635,132,116,153,0,0},
    { DROPDOWN_CreateIndirect,   NULL,               GUI_ID_DROPDOWN0,        242,114,83, 80, 0,0}
};

使用特权

评论回复
7
g_lcd| | 2016-7-12 16:52 | 只看该作者
【能接emWin的SPI串口屏】
GLCD功能类似于SPI串口屏,只是SPI接口通信更快速,以至能作为emWin(第三方界面软件库)的图形显示屏,弥补emWin使用字库/图片麻烦以及刷屏慢的缺点,这样emWin做界面就更精美、便捷!
emWin界面软件库是运行在用户CPU中的;GLCD负责储存字库和图片,以及接收由emWin发出的绘图指令,并且执行这些绘图指令以显示文字、图片、2D图形等,绘图指令代替像素操作可大大减轻用户CPU的负担;GLCD还管理触摸屏、鼠标、键盘、蜂鸣器、RTC时钟等外设。
更多介绍请看:neqee.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

72

帖子

6

粉丝