硬汉嵌入式论坛

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

[有问必答] 虚拟键盘如何自由移动?

[复制链接]

22

主题

24

回帖

90

积分

初级会员

积分
90
发表于 2015-4-13 14:49:38 | 显示全部楼层 |阅读模式
      虚拟键盘怎样移动,我添加{ FRAMEWIN_CreateIndirect, "KEYbod", 0,                 240,  190, 480, 202, FRAMEWIN_CF_MOVEABLE  },
后可以移动了,但FRAMEWIN默认有输入焦点,点击按钮时,需要输入的窗口焦点被改变,消息发不到输入窗口了。去掉
{ FRAMEWIN_CreateIndirect, "KEYbod", 0,                 240,  190, 480, 202, FRAMEWIN_CF_MOVEABLE  },之后可以,
但有不知如何移动键盘了。请高手指点!
回复

使用道具 举报

1

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2015-4-13 15:30:40 | 显示全部楼层
谢谢分享[s:147]
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2015-4-13 16:33:33 | 显示全部楼层
这个参数:FRAMEWIN_CF_MOVEABLE使能了自由移动,emWin的聚焦做的有些差,非常不好用,暂时我也不知道怎么搞比较好。
回复

使用道具 举报

22

主题

24

回帖

90

积分

初级会员

积分
90
 楼主| 发表于 2015-4-13 20:51:29 | 显示全部楼层
谢谢!大家一起研究研究吧
回复

使用道具 举报

0

主题

2

回帖

0

积分

新手上路

积分
0
发表于 2015-5-17 23:14:48 | 显示全部楼层

虚拟键盘如何自由移动?我也遇到了这个问题啊!

我仿照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, 下载次数: 127

回复

使用道具 举报

0

主题

2

回帖

0

积分

新手上路

积分
0
发表于 2015-5-17 23:55:26 | 显示全部楼层

解决了!

在回调函数中,响应WM_TOUCH消息即可:
case WM_TOUCH:
          {const GUI_PID_STATE * pState;
           pState = (const GUI_PID_STATE *)pMsg->Data.p;
           if (pState)
            { if (pState-&gtressed)
              {  WM_SetCaptureMove(hDlg, pState, 0, 0);
              }
            }
          }
          break;

SimulationTrial.zip

1.64 MB, 下载次数: 118

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2015-5-17 23:56:48 | 显示全部楼层

回 lkmcu 的帖子

lkmcu:在回调函数中,响应WM_TOUCH消息即可:
case WM_TOUCH:
          {const GUI_PID_STATE * pState;
           pState = (const GUI_PID_STATE *)pMsg->Data.p;
 & .. (2015-05-17 23:55) 
[s:151]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 22:20 , Processed in 0.206389 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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