解决全屏UI中输入法的问题(一)
来源:互联网 发布:linux常用网络命令大全 编辑:程序博客网 时间:2024/05/19 02:27
本文重点讲解输入如何去自己处理输入法的问题,由于最近在写一个程序,发现这个问题是写windows程序一段时间后,很多人都会遇到的问题,所以简单尝试了一下有关的几个方法,也不知道对不对,先这样做一个初级的版本出来,目前只能显示和选词空间,而且UI为了方便使用了最丑陋的windows原始的UI,不过后期我会改进的呵呵,由于有人希望我第一时间把这个代码和方法公布出来,所以我就先把第一个版本草草的给大家展示一下,不好的地方希望大家一起提高。
废话先说这么多,我想大家既然都搜到这篇名不经传的小文章了,想必都已经知道IMM这个东西了,不过不知道也不要紧,第一步先加入Imm32.lib;这个库文件,不知道如何加入的回家面壁去。
下面开始介绍下几个消息;
我想关于输入法的第一个消息就是WM_INPUTLANGCHANGE这个消息了,这个消息当我们的输入的语言改变的时候会发出该消息。
然后介绍一个WM_IME_STARTCOMPOSITION:这个是开始接收到键盘键入并开始将按键按照一定的规则转化成字符编码。
当然与之对应的一个是WM_IME_ENDCOMPOSITION:不用说这个是结束转化的一个消息。
重中之重是在这两个消息中间的状态消息WM_IME_COMPOSITION:这个消息是我们按键要获取输出字符,和输入按键的一个消息。
最重要的角色总是最后出场,最后介绍下WM_IME_NOTIFY:这个是我们关注输入法的全角半角,中文英文标点,翻页,进入选字表等操作的地方。
这个是要处理的几个消息。
下面我开始说明一些我们要用的函数:
//获取当前激活的键盘布局
HKL hKL = GetKeyboardLayout( 0 );
//当前激活的键盘布局是否有输入法窗口
ImmIsIME(hKL)
//获取环境
HIMC hIMC = ImmGetContext(d_hWnd);
//释放环境
ImmReleaseContext(d_hWnd,hIMC);
//获取输入法的名称
ImmEscapeW(hKL,hIMC,IME_ESC_IME_NAME,d_imeName
//更新各个输入法内部状态
DWORD dwConversion, dwSentence;
ImmGetConversionStatus(hIMC,&dwConversion,&dwSentence);
CANDIDATELIST 这个结构是存储字符列表的东西,详细的介绍可以参考msdn。
//获取缓冲区的数据
ImmGetCandidateListW(hIMC,0,(LPCANDIDATELIST)d_bufCandidate,buflen);
CANDIDATELIST *pList = (CANDIDATELIST*)d_bufCandidate;
ImmGetCompositionStringW这个函数有多个参数,我就懒得说明各个调用是什么意思,大家可以参考
http://msdn.microsoft.com/en-us/library/windows/desktop/dd318164(v=vs.85).aspx
这个是各个参数的说明,嘿嘿,程序员嘛懒是正常的。
当然这篇文章最好配合上我的代码进行测试,在输入的时候只要点击父窗口,打开输入法就可以了。子窗口是显示输入法中选字和键盘按键输入的。附上截图:
当然,犀利一点的人会发现,这岂不是可以把搜狗词的排序通过这种办法弄到,在做预先输入模型的时候是一个很好的选择,这不是本程序的本意。本程序只是交给大家如何在无法显示输入法选词窗口的时候使用他。
在此郑重声明,凡是使用此代码乱搞的人,一切本人概不负责,以及代码中若有任何bug,或者商业使用导致的任何问题,与本人无关,这个代码纯粹为了教学。若该代码引起了任何问题请按照以下排序的倒序去追究责任:
1.作者
2.使用者
3.csdn编辑
4.csdn管理人员
5.发现问题的人
6. 准备提起诉讼者。
好了就写这么多吧!最后的最后附上资源地址:
http://download.csdn.net/detail/xueyunf/5599975
最后来张经典截图:
哈哈哈哈哈哈,好了时间差不多了,就到这里了!
- 解决全屏UI中输入法的问题(一)
- unity3D 完美解决 全屏输入法问题
- 全屏状态下的输入法布局问题
- (问题)输入法全屏模式bug
- Android中解决输入法问题
- VM中解决Ubuntu不能全屏的问题
- Android解决ScrollView中布局不能撑满全屏的问题(记录)
- 解决c#中winform的输入法不可用问题
- 解决Debian中ibus输入法不能自动启动的问题
- 解决Ubuntu11.04中Opera中文输入法ibus的问题
- 如何解决Android中输入法挡住输入框的问题
- 如何解决Android中输入法挡住输入框的问题
- fcitx输入法在wps、wineqq中失灵问题的解决
- android 中解决输入法挡住输入框的问题
- 如何解决Android中输入法挡住输入框的问题
- 如何解决Android中输入法挡住输入框的问题
- PopupWindow中解决输入法遮盖住编辑框的问题
- android 中解决输入法挡住输入框的问题
- HDU 寒冰王座
- 图片上传并预览(IE,火狐浏览器兼容问题)
- Request读取中文数据乱码的原因,以及解决办法
- 备忘:Api查询网址
- [转载]C# 写Windows服务程序
- 解决全屏UI中输入法的问题(一)
- POJ 1703 Find them, Catch them
- Android开发_viewpager作为header加入到listview
- 一套非常适用权限系统快速开发框架源代码
- Life/Asia table struct copybook convert to java pojo automaticlly
- 经典回顾超炫酷阅读效果3D Book使用方法
- Algorithmic Implementation series(8) Implementation of Counting_Sort
- 均值、中值滤波、孤点检测
- 在linux使用RAR