最近又开始研究输入法的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系统下获得百度输入法的名字相关推荐

  1. 终端linux输入法安装程序,在Ubuntu系统下安装百度输入法Linux版的方法

    本文介绍在Ubuntu系统下安装百度输入法Linux版(也称为百度Linux输入法)的方法,以Ubuntu 18.04版本为例说明.说明:该输入法支持在Ubuntu 18.04.1810.1904.1 ...

  2. Win8系统下,如何一键找回Win7的经典开始菜单。

    Win8系统下,如何一键找回Win7的经典开始菜单. 需求分析: 最近Win8系统开发者预览版已经在网上发行了好久,自己心里琢磨了好久,终于打算安装Win8体验一下了.可是开始菜单的变化确实够大的.想 ...

  3. 如何锁定计算机到任务栏,Win7 Win8系统下如何将“计算机”锁定到任务栏

    适用范围: win7/win8知识点分析: Win7.Win8系统默认关闭了快速启动栏,引入了新的功能"库",锁定到任务栏的计算机默认仍然打开"库",不能直接打 ...

  4. bat修改win8计算机名,Win7/win8系统下利用批处理文件批量修改文件后缀名的方法...

    大家都知道,文件后缀名也叫文件扩展名,是用来表示某种文件格式所采用的机制,不过有时候有需要想要修改文件的后缀名类型,一般都是通过右键修改重命名来完成的,但是如果需要修改多个文件后缀名的话一个个修改太麻 ...

  5. 计算机删除网络位置,Win7/win8系统下如何快速删除多余的网络位置【图文】

    Win7/win8系统下如何快速删除多余的网络位置:电脑买来的第一个任务就是连接网络上网,连接网络不是什么难事,但是在一些网络不稳定的情况下,很多用户会发现,网络连接中多出了很多"网络位置& ...

  6. win8信息服务器不可用怎么办,win8系统下开机提示OneDrive选项此服务现在不可用请稍后再试怎么办...

    近日有部分win8系统用户到本站反馈说说碰到这样一个情况,就是电脑在开机的时候,出现提示OneDrive选项此服务现在不可用,请稍后再试,碰到这样的问题该怎么办呢,现在随win7之家小编一起来看看wi ...

  7. PHP 屏幕亮度,window_Win8系统 调节电脑屏幕亮度的四种方法,第一页:Win8系统下调节电脑屏 - phpStudy...

    Win8系统 调节电脑屏幕亮度的四种方法 第一页:Win8系统下调节电脑屏幕亮度的四种方法 第二页:Win8系统下调节电脑屏幕亮度的四种方法 刚接触到win8系统的用户或许会比较生疏,很多设置都找不到 ...

  8. 解决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 ...

  9. 玩qq游戏提示计算机内存不足,Win8系统下玩lol提示关闭程序以防止信息丢失内存不足怎么办...

    很多人都喜欢在win8系统下玩lol等大型游戏,而在玩游戏过程中经常会碰到一些问题,一些win8系统用户在玩LOL的时候程序崩溃,计算机的内存不足,提示"关闭程序以防止信息丢失,计算机内存不 ...

  10. win7 64位系统下 Logitech(罗技) M555b蓝牙鼠标断线解决办法

    笔者的笔记本电脑是ThinkPad T420.用Logitech(罗技) M555b鼠标已经有一年多的时间了,不过之前一直是在win7 32位系统下使用的,用了能有一年多的时间,一直很稳定,没有出现过 ...

最新文章

  1. Freemarker详细解释
  2. SQL经典实例(五)元数据查询
  3. linux算术表达式求值数据结构,数据结构:算数表达式求值演示
  4. 计算机组成原理主存储器知识点,计算机组成原理(存储器).ppt
  5. Redhat Linux 7.3 虚拟机通过USB挂载NTFS格式的移动硬盘
  6. LeetCode 322. 零钱兑换(DP)
  7. linux中date命令详解,Linux 之date命令详解
  8. \r:command not found
  9. JavaScript 之 面向对象 [ 原型 ]
  10. 不好好写代码,就只能回去当总理了!
  11. javascript 实现单击和双击并存
  12. Emberjs学习之路(一)
  13. OWOD:开放世界目标检测,更贴近现实的检测场景 | CVPR 2021 Oral
  14. OpenCR介绍以及自制OpenCR
  15. 图论(5)邻接谱,邻接代数,图空间,托兰定理
  16. 【WIN】svchost与共享进程服务
  17. 前馈神经网络——神经元
  18. 神经网络实战网盘资源,神经网络实战项目
  19. 计算机学生如何规划好大学四年的学习?
  20. 安全邮箱是什么邮箱?怎么登录163邮箱?

热门文章

  1. kafka消费者重复消费同一个topic
  2. 《异常检测——从经典算法到深度学习》2 基于LOF的异常检测算法
  3. WordPress Cookies因预料之外的输出被阻止
  4. 在座的各位来看看这些笔试题能答上几道,全答对怕不是大佬!
  5. Ubuntu服务器有一张显卡nvidia-smi指令不能显示问题(未解决)
  6. 从头开始学习python自动化(四)编写框架
  7. SocKet通信写简单聊天程序
  8. MySQL之存储过程实例讲解(创建、调用、查看、修改、删除)
  9. COGS 2510. 拯救紫萱学姐
  10. 分支-15. 日K蜡烛图