VC++在Win7和Win8系统下获得百度输入法的名字
最近又开始研究输入法的bug了。。。真倒霉。。。这次是为了解决在微软拼音和谷歌拼音输入法开启的时候,Dynamic input输入的第一个数字(比如圆的直径)会丢失,这肯定是来自中国客户的抱怨,而且貌似是个大客户,上头催得紧,得罪不起,咋办,只能研究了呀!
我们之前的逻辑是这样的:
1. 在View里面监视KeyDown事件,假如收到的Char是VK_PROCESSKEY,那么就认为这是一个输入法字符,会触发输入法的Composition,处理的方法就是:
a)把事件标记成已处理,这样就屏蔽了WM_CHAR消息;
b)显示一个空的输入框~(对于用户来说,看到的是一个空的输入框,外加一个输入法自己显示的候选词窗口)。 对于普通的中文输入法来说(搜狗,QQ),这个是完美的,但是微软和谷歌则不一样,在输入法开启后,就算你输入的是数字!他发送的也是VK_PROCESSKEY消息,而且,不会出现候选词窗口,那么用户看到的就是一个空的输入框了(因为WM_CHAR被屏蔽了)。。。
2. 那么解决方案是什么呢?。。。最简单的话,就是判断,这是不是一个真正的IME Char,或者说这个字符到底会不会触发IME Composition窗口!假如不会,那么就继续发送WM_CHAR消息,于是就有了这么如下代码:
bool
CAcDynInput::onExternalKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags, bool& bWantOnChar)
{// IMEif (nChar == VK_PROCESSKEY) {bool bImeEnterCompositionMode = true;// DID#1488000. The origin logic is that if nChar == VK_PROCESSKEY,// we assume it will turn IME into Composition Mode and show the candidate// words in IME's composition floating window. So we suppress the// WM_CHAR message and show an empty Dynamic Input Box and user // will see the IME compostion window near by. But actually, for Microsoft // Pinyin IME and Google Pinyin IME, if you type number '1', though the nChar// is still VK_PROCESSKEY, but it won't enter IME composition mode. As a result, // the char is lost (bcz we suppress WM_CHAR message) and user on
VC++在Win7和Win8系统下获得百度输入法的名字相关推荐
- 终端linux输入法安装程序,在Ubuntu系统下安装百度输入法Linux版的方法
本文介绍在Ubuntu系统下安装百度输入法Linux版(也称为百度Linux输入法)的方法,以Ubuntu 18.04版本为例说明.说明:该输入法支持在Ubuntu 18.04.1810.1904.1 ...
- Win8系统下,如何一键找回Win7的经典开始菜单。
Win8系统下,如何一键找回Win7的经典开始菜单. 需求分析: 最近Win8系统开发者预览版已经在网上发行了好久,自己心里琢磨了好久,终于打算安装Win8体验一下了.可是开始菜单的变化确实够大的.想 ...
- 如何锁定计算机到任务栏,Win7 Win8系统下如何将“计算机”锁定到任务栏
适用范围: win7/win8知识点分析: Win7.Win8系统默认关闭了快速启动栏,引入了新的功能"库",锁定到任务栏的计算机默认仍然打开"库",不能直接打 ...
- bat修改win8计算机名,Win7/win8系统下利用批处理文件批量修改文件后缀名的方法...
大家都知道,文件后缀名也叫文件扩展名,是用来表示某种文件格式所采用的机制,不过有时候有需要想要修改文件的后缀名类型,一般都是通过右键修改重命名来完成的,但是如果需要修改多个文件后缀名的话一个个修改太麻 ...
- 计算机删除网络位置,Win7/win8系统下如何快速删除多余的网络位置【图文】
Win7/win8系统下如何快速删除多余的网络位置:电脑买来的第一个任务就是连接网络上网,连接网络不是什么难事,但是在一些网络不稳定的情况下,很多用户会发现,网络连接中多出了很多"网络位置& ...
- win8信息服务器不可用怎么办,win8系统下开机提示OneDrive选项此服务现在不可用请稍后再试怎么办...
近日有部分win8系统用户到本站反馈说说碰到这样一个情况,就是电脑在开机的时候,出现提示OneDrive选项此服务现在不可用,请稍后再试,碰到这样的问题该怎么办呢,现在随win7之家小编一起来看看wi ...
- PHP 屏幕亮度,window_Win8系统 调节电脑屏幕亮度的四种方法,第一页:Win8系统下调节电脑屏 - phpStudy...
Win8系统 调节电脑屏幕亮度的四种方法 第一页:Win8系统下调节电脑屏幕亮度的四种方法 第二页:Win8系统下调节电脑屏幕亮度的四种方法 刚接触到win8系统的用户或许会比较生疏,很多设置都找不到 ...
- 解决win7 64位操作系统下安装PL/SQL后连接报错问题: make sure you have the 32 bits oracle client installed
解决win7 64位操作系统下安装PL/SQL后连接报错问题: make sure you have the 32 bits oracle client installed 参考文章: (1)解决wi ...
- 玩qq游戏提示计算机内存不足,Win8系统下玩lol提示关闭程序以防止信息丢失内存不足怎么办...
很多人都喜欢在win8系统下玩lol等大型游戏,而在玩游戏过程中经常会碰到一些问题,一些win8系统用户在玩LOL的时候程序崩溃,计算机的内存不足,提示"关闭程序以防止信息丢失,计算机内存不 ...
- win7 64位系统下 Logitech(罗技) M555b蓝牙鼠标断线解决办法
笔者的笔记本电脑是ThinkPad T420.用Logitech(罗技) M555b鼠标已经有一年多的时间了,不过之前一直是在win7 32位系统下使用的,用了能有一年多的时间,一直很稳定,没有出现过 ...
最新文章
- Freemarker详细解释
- SQL经典实例(五)元数据查询
- linux算术表达式求值数据结构,数据结构:算数表达式求值演示
- 计算机组成原理主存储器知识点,计算机组成原理(存储器).ppt
- Redhat Linux 7.3 虚拟机通过USB挂载NTFS格式的移动硬盘
- LeetCode 322. 零钱兑换(DP)
- linux中date命令详解,Linux 之date命令详解
- \r:command not found
- JavaScript 之 面向对象 [ 原型 ]
- 不好好写代码,就只能回去当总理了!
- javascript 实现单击和双击并存
- Emberjs学习之路(一)
- OWOD:开放世界目标检测,更贴近现实的检测场景 | CVPR 2021 Oral
- OpenCR介绍以及自制OpenCR
- 图论(5)邻接谱,邻接代数,图空间,托兰定理
- 【WIN】svchost与共享进程服务
- 前馈神经网络——神经元
- 神经网络实战网盘资源,神经网络实战项目
- 计算机学生如何规划好大学四年的学习?
- 安全邮箱是什么邮箱?怎么登录163邮箱?