6869|19

107

帖子

0

资源

一粒金砂(初级)

中文拼音 软键盘

要写一个软键盘(用自己的UI,键盘的布局和普通的键盘差不多),能输入英文,能用拼音输入汉字。
英文的简单,因为public下有源码,我只需要替换一下UI就可以了。而且思路也简单,点哪个字母就显示那个字母。
但,中文怎么做,按下的字母串怎么和拼音的汉字库发生关系,我现在没有思路,也没有参考的例子。
请朋友们帮助,谢谢!

回复

127

帖子

0

资源

一粒金砂(初级)

你这不是软件盘的问题,而是要做输入法。

回复

112

帖子

0

资源

一粒金砂(初级)

对,我也想起来,这是输入法的问题

回复

105

帖子

0

资源

一粒金砂(初级)

该专门去做输入法了。处理起来没有普通E文按键那么方便。至少需要捕获所有按键输入,进行分支判断了。还牵涉到字符集,字体。

回复

122

帖子

0

资源

一粒金砂(初级)

不知道网上有没有输入法的源码?请朋友们指点

回复

108

帖子

0

资源

一粒金砂(初级)

不知道输入法有没有提供什么接口?

回复

113

帖子

0

资源

一粒金砂(初级)

不知道输入法有没有提供什么接口,提供给我们使用?

回复

113

帖子

0

资源

一粒金砂(初级)

参考 norains的blog系列
漫谈WinCE输入法的编写(一)
http://blog.eeworld.net/norains/archive/2007/02/10/1507234.aspx

回复

98

帖子

0

资源

一粒金砂(初级)

wince第三版最后的部分有详细代码

回复

113

帖子

0

资源

一粒金砂(初级)

引用 8 楼 xiayadong 的回复:
wince第三版最后的部分有详细代码

我只知道wince4.2,5.0,6.0等版本,wince第三版具体是什么?请说详细点!谢谢

回复

129

帖子

0

资源

一粒金砂(初级)

我有个朋友也碰到这个问题,好像快解决了,我问他一下,
但可以确定的是,你这个做的不是软键盘,是输入法,


回复

106

帖子

0

资源

一粒金砂(初级)

//========================================================================
//TITLE:
//    漫谈WinCE输入法的编写(一)
//AUTHOR:
//    norains
//DATE:
//    Saturday  10-February -2007
//Environment:
//        EVC4.0 + Standard SDK
//========================================================================
        WinCE的输入法编写,说复杂也不复杂,说简单亦不简单.说复杂嘛,是因为输入法是一个COM,需要实现某些接口,并且由于其特殊性,不能像普通应用程序一样进行调试;说简单嘛,只要把层次搞清,剩下的就和普通应用程序没什么太多的区别.
        
        我觉得如果光谈概念,以我的文字功底,让人明白内中的机理,估计不是一件非常容易的事情.所以,我还是实际点,以我写过的一个输入法来做为例子.

        因为这篇文章不是专门介绍COM接口技术的原理,我们的目的仅仅是让输入法给跑起来,因此我们只需要了解输入法用到了什么接口,以及我们应该如何定义该接口的功能即可.

        为了代码层次分明,我这个例子采用了三个类:CClassFactory,CInputMethod和CIMWnd.前面两个类分别继承于IClassFactory和IInputMethod,是能让系统正常调用输入法所必须的com接口;而CIMWnd则是输入法的窗口,和普通的应用程序无异.

        这三个类的关系是CClassFactory通过自身的CreateInstance()函数来创建一个CInputMethod类的对象,然后CInputMethod类中会调用CIMWnd类来显示一个输入法窗口.以图片的形式来说,三者的关系如下:


        现在就让我们来看看CClassFactory类的声明:         class CClassFactory : public IClassFactory
        ...{
        public:
            CClassFactory(long *plDllCnt,HINSTANCE hInst);
            virtual ~CClassFactory();               
            
          //IUnknown methods
          STDMETHODIMP QueryInterface (THIS_ REFIID riid, LPVOID *ppv);
          STDMETHODIMP_(ULONG) AddRef (THIS);
          STDMETHODIMP_(ULONG) Release (THIS);
           
          //IClassFactory methods
          STDMETHODIMP CreateInstance (LPUNKNOWN pUnkOuter, REFIID riid,LPVOID *ppv);
          STDMETHODIMP LockServer (BOOL fLock);            
        
        private:
            long *m_plDllCnt;//point to the Global DLL reference count
          long m_lRef;
            HINSTANCE m_hInst;
        };
        
        
        IUnknown标准接口:
        
        QueryInterface:该函数用来查看对象支持哪种方法,这也是COM接口最先调用的函数.
        
        AddRef:增加一次对象调用计数.
        
        Release:减少一次对象调用计数.
        
        
        
        IClassFactory特有的接口:
        
        CreateInstance:系统调用该函数去创建另一个所需的实例.本文的例子中,这个函数体内创建了一个CInputMethod类的对象.
        
        LockServer:用来标识该DLL是否被卸载.本文中,只有检测到m_plDllCnt变量为0值,也就是说该DLL已经没有被引用,此时管理器才会卸载该DLL.
        
        
   
    接下来就让我们再来看看CInputMethod类:     class CInputMethod : public IInputMethod
    ...{
    public:
   
        //IUnknown methods
        STDMETHODIMP_(ULONG) Release(THIS);
        STDMETHODIMP_(ULONG) AddRef(THIS);
        STDMETHODIMP QueryInterface(THIS_ REFIID riid, LPVOID *ppv);
   
        //IInputMethod
        HRESULT STDMETHODCALLTYPE SetImData (DWORD dwSize, void *pvImData);
        HRESULT STDMETHODCALLTYPE GetImData (DWORD dwSize, void *pvImData);
        HRESULT STDMETHODCALLTYPE RegisterCallback(IIMCallback *pIMCallback);
        HRESULT STDMETHODCALLTYPE ReceiveSipInfo(SIPINFO *psi);
        HRESULT STDMETHODCALLTYPE GetInfo(IMINFO *pimi);
        HRESULT STDMETHODCALLTYPE Hiding();
        HRESULT STDMETHODCALLTYPE Showing();
        HRESULT STDMETHODCALLTYPE Deselect();
        HRESULT STDMETHODCALLTYPE Select(HWND hWndSip);
        HRESULT STDMETHODCALLTYPE UserOptionsDlg (HWND hwndParent);
        CInputMethod(long *plDllCnt,HINSTANCE hInst);
        virtual ~CInputMethod();
   
    protected:
        CIMWnd *m_pIMWnd; //The input method window pointer
        HINSTANCE m_hInst; //The dll instance
        long *m_plDllCnt;//point to the Global DLL reference count
        long m_lRef;
    };
    CInputMethod的IUnknown标准接口的作用和CClassFactory相同,在此就不赘述.
   
   
    IInputMethod特有接口:
   
    SetImData:应用程序可以通过该接口来获取输入法(IM)的信息.
   
    GetImData:传递特定的信息给输入法.
   
    RegisterCallback:SIP提供给输入法的回调函数接口.通过该回调函数接口,输入法可以给调用输入法的应用程序发送字符或键盘信息等等.这个是比较重要的一个函数,输入法就是通过该函数传递过来的接口函数来建立和外部的联系.
   
    ReceiveSipInfo:SIP通过该接口传递消息给输入法.
   
    GetInfo:SIP通过该接口来获取输入法的信息.
   
    Hiding:隐藏输入法.
   
    Showing:显示输入法.
   
    Deselect:输入法即将从内存中卸载的时候将调用该接口.
   
    Select:输入法装载到内存之前调用该接口.最明显的用户感受是在输入法管理器中选择某种输入法时,该接口即被调用.
   
    UserOptionsDlg:控制面板通过该接口用来设置输入法的属性.

回复

96

帖子

0

资源

一粒金砂(初级)

引用 1 楼 yashi 的回复:
你这不是软件盘的问题,而是要做输入法。

你误导我了,不是输入法的问题,是输入法编辑器的问题

回复

96

帖子

0

资源

一粒金砂(初级)

ls的帖子我看过了,讲的是软键盘输入法,这个不是我想知道的,
我想知道的是输入法(IM)怎么和输入法编辑器(IME)发生联系的?
这么说:如果我们不加组件MSPY 3.0 IME和汉字库,软键盘只能写出字母,而不能写出汉字;
当我们加上MSPY 3.0 IME和汉字库,按下的字母串怎么转变成汉字输出的?怎么和拼音的汉字库发生联系?

回复

102

帖子

0

资源

一粒金砂(初级)

哪位大侠给点意见啊!

回复

111

帖子

0

资源

禁止发言

学习一下!!!!

回复

106

帖子

0

资源

一粒金砂(初级)

用WINDOWS的API截获所有系统消息,如果发现是EDIT获取焦点则弹出自己的输入法UI.输入完毕后再发送WINDOW TEXT CHANGE消息,把输入字符发送给EDIT窗口.当焦点不再是EDIT窗口后,隐藏或销毁输入法UI.

回复

85

帖子

0

资源

一粒金砂(初级)

那位兄弟给个拼音输入法的源码,参考

回复

96

帖子

0

资源

一粒金砂(初级)

我想用IMM函数和消息来创建并且管理其自己的IME窗口,不知道具体要怎么做?请高手指点!

回复

126

帖子

0

资源

一粒金砂(初级)

听说 蒙恬CEStar有源码,请高手发给我参考,谢谢

回复
您需要登录后才可以回帖 登录 | 注册

关闭
站长推荐上一条 1/5 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表