紧急!共有200分奉送!中文输入法的软键盘是如何实现的?
我编了一个类似输入法软键盘的程序,目前可以正常输入英文,但是当
输入中文时,发现向网页中输入就会出问题,原因是由于我的程序采用
焦点转换的方法,用户点击模拟键盘后,程序需要重新定位到网页中待输入的
地点,SetFocus(),但这样的话,原先已经输入的中文拼音部分就会消失
(这个问题在向一般窗口的对话框中输入就没有问题)。
今天发现,使用输入法的软键盘就没有这个问题,原因是当点击软键盘种的
按钮时,就不会出现待输入地点和软键盘之间的焦点变换。可是我不知道
如何实现这个功能?
这个问题我在http://www.csdn.net/expert/topic/95/95898.shtm和http://www.csdn.net/expert/topic/94/94455.shtm中已经问道,可是没有人给出回答,这里再次提问一次,一共200多分!
谢谢!
问题点数:80、回复次数:15Top
1 楼vcbear(http://vcbear.mblogger.cn)回复于 2001-04-16 09:55:00 得分 30
你点击软键盘的时候,软键盘是不获得焦点的,可能本身是一个disable类型的窗体。
但是他可以获得点击信息,用的技术很大路:Hook.Hook到消息后,自己处理一下,
在界面上模拟有焦点窗口的动作,比如移动,键按下...等等。
我为什么知道这个,因为我在WinCE下用软键盘的时候,它频繁的KeyboardHook,MouseHook
出错。Top
2 楼vcbear(http://vcbear.mblogger.cn)回复于 2001-04-16 09:56:00 得分 0
错了,是WinMe 的软键盘。Top
3 楼beantong(beantong)回复于 2001-04-16 10:25:00 得分 0
运行环境是win98Top
4 楼vcbear(http://vcbear.mblogger.cn)回复于 2001-04-16 10:31:00 得分 0
都是一样的。Top
5 楼bobqi(灰冷)回复于 2001-04-16 10:38:00 得分 0
在vchelp上有一个软键盘的例子,你可以看一下Top
6 楼beantong(beantong)回复于 2001-04-16 10:43:00 得分 0
我就是参考了那个例子作的,现在的问题那个例子也没有办法解决。
主要问题就是出在那个程序的ReleaseFocus函数的SetFocus()上,导致无法输入拼音。Top
7 楼vcbear(http://vcbear.mblogger.cn)回复于 2001-04-16 10:49:00 得分 0
不要让你的程序得到焦点,就是说不让你的对象程序失去焦点,所以要用Hook。那个例子路子本来就不对。Top
8 楼In355Hz(好象一条狗)回复于 2001-04-16 11:01:00 得分 50
vcbear说的对,你用spy看看就知道了,软键盘是一个有WS_DISABLED属性的窗体,所以点击软键盘不会导致它获得焦点(当然本身也不会获得消息)。你在这之外用一个鼠标钩子挂在创建软键盘窗体的线程上(不用全局的),在获得点击消息WM_LBUTTONUP的时候,检查一下鼠标的位置是不是位于软键盘的某个键上,再处理成相应的键盘输入消息就可以了。
Top
9 楼In355Hz(好象一条狗)回复于 2001-04-16 11:11:00 得分 0
错了,钩子是挂在目标窗体的线程上。Top
10 楼beantong(beantong)回复于 2001-04-16 11:13:00 得分 0
有没有实现的具体例子,或者是hook的实现例子,小弟没用过。
谢谢!Top
11 楼vcbear(http://vcbear.mblogger.cn)回复于 2001-04-16 11:33:00 得分 0
修行在个人。
钩子的例子这里太多了。用“钩子”或“Hook”作关键字搜索一下吧。
Top
12 楼beantong(beantong)回复于 2001-05-04 11:33:00 得分 0
问题解决,谢谢!Top
13 楼tianya(天涯)回复于 2001-05-15 17:35:00 得分 0
beantong 你好,我现在也想做个类似软键盘的程序,希望能得到你的帮助,我的程序是这样的,, 有一个编辑控件,当点击它时,编辑控件得到焦点,并且弹出一个输入框(数字小键盘)点击输入框相应的数字就输入到编辑控件上(编辑控件一直存在焦点的),希望能得到你的帮助!!Top
14 楼huxiao_ping(老虎头)回复于 2001-06-21 10:55:00 得分 0
同样想得到你的帮助,我在项目中需要一个软键盘!huxiao_ping@sina.com.cnTop
15 楼huxiao_ping(老虎头)回复于 2001-06-21 11:18:00 得分 0
我也是借鉴vchelp上的例子做的!但不能向其他对话框输入,只能打开一个写字板输入!
Top




