游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10081|回复: 10

关于CEGUI的输入法编程

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-1-27 17:03:00 | 显示全部楼层 |阅读模式
我已经对CEGUI增加了中文输入的支持,可是现在出现了一个问题,当我键入输入法的字符按backspace的时候,输入法面板上的英文被删除,同时editbox里面的文字也会被删除,这个问题我也解决了

doDirectInputEvents方法里面的

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-1-27 17:08:00 | 显示全部楼层

Re:关于CEGUI的输入法编程

if(!ImmIsIME( GetKeyboardLayout(0))) //输入法没关闭的时候才识别键盘事件可以防止
                                                        //backspace的bug
         CEGUI::System::getSingleton().injectKeyDown(devDat.dwOfs);

但新的bug又来了,我只能防止删除输入法的面板英文时不删除editbox里面的文字,但输入法面板删除光拼音字母,就只有输入法面板开启的时候,不能删除editbox里面的文字了,就时说,只要打开汉字输入法就不能删除editbox里面的东西,我想知道如何能知道输入法有没开启选字面板,如果能知道这个状态,一切的问题都解决了

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-1-27 17:10:00 | 显示全部楼层

Re:关于CEGUI的输入法编程

说了这么多,也就是如何知道输入法正处于选字状态还是没处于选字状态?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-1-27 17:16:00 | 显示全部楼层

Re:关于CEGUI的输入法编程

自己解决了,原来有这么几个消息
WM_INPUTLANGCHANGEREQUEST;
WM_INPUTLANGCHANGE;
WM_IME_SETCONTEXT;
WM_IME_STARTCOMPOSITION;
WM_IME_ENDCOMPOSITION;
WM_IME_NOTIFY;
WM_IME_COMPOSITION;


我终于搞定了CEGUI的中文输入,再去找找BUG,呵呵基本上应该没有什么问题了,还剩下,复制和粘贴的功能没搞定。这几天再加把劲!

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-1-27 17:35:00 | 显示全部楼层

Re: 关于CEGUI的输入法编程

经过几天努力,还是很有收获啊。
sf_2007127173439.jpg

20

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
发表于 2007-1-29 19:01:00 | 显示全部楼层

Re:关于CEGUI的输入法编程

我一直就想搞定输入问题。搂住能介绍一下解决方案吗?

21

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2007-5-29 08:50:00 | 显示全部楼层

Re:关于CEGUI的输入法编程

楼主,多共享些心得啊

4

主题

19

帖子

73

积分

注册会员

Rank: 2

积分
73
QQ
发表于 2008-3-5 10:11:00 | 显示全部楼层

Re:关于CEGUI的输入法编程

怎么搞定输入法啊?我的只能显示中文,无法输入中文

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2008-3-5 12:45:00 | 显示全部楼层

Re:关于CEGUI的输入法编程

        case WM_IME_CHAR:
                hIMC = ImmGetContext(hWnd);//取得输入上下文
                                ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);
                                //strcat( m_lpszImeInput,lpResultStr );
                                //printf("结束........%d............%d %s \n",ime_char_count, dwLen, lpResultStr); //得到ime输入的文字了
                                wchar_t szUnicode;
                                MultiByteToWideChar(CP_ACP, 0, (char*)(lpResultStr + ime_char_count), 2, &szUnicode, 1);
                                CEGUI::System::getSingleton().injectChar((CEGUI::utf32)szUnicode);
                               
                                ImmReleaseContext(hWnd,hIMC);


核心的部分贴在这里了,只能说这么多了,你好好琢磨琢磨,这样陈年的帖子也翻出来楼上的真是用心啊。

83

主题

169

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2008-8-28 11:24:00 | 显示全部楼层

Re:关于CEGUI的输入法编程

用这个方法我实现了对中文的输入,但是要输入英文就不行了。
象“123”这样的字符串也不能输入。
这是怎么回事?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 14:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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