Foxmail★Blog

——朱俊Blog

用户操作
[即时聊天] [发私信] [加为好友]
朱俊ID:foxmail
134290次访问,排名620好友0人,关注者1
foxmail的文章
原创 100 篇
翻译 0 篇
转载 10 篇
评论 235 篇
最近评论
vvukqr:WoW Gold
ym:好文才,对我就像醍醐灌顶
阿豪:你的墙纸设置方法有问题,无法设置jpg和gif,只能设置bmp。如果设置图片为jpg和gif墙纸没有任何变化。如果你感兴趣,我可以把代码发给你看看,看看到底是你的方法有问题还是我做得不对。
nqh@exchange.ricsson.com
xiaopianzi:看到你对svm有研究,所以请问svmlight多分类预测时,我连网页上提供的exampel效果都不好,怎么回事?参数的选定有没有窍门?还有libsvm我用它作多分类预测,总是报错!怎么回事?请指教!!!
egxsun:要是加flash,怎么改这段:if (filmURL != null) {
filmstring = '<object classid=""clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6"" id=""WindowsMediaPlayer1"">'; ……
文章分类
收藏
相册
Funny
文章用图
朱俊
我的主页
MSN Space
中国人工智能网
恋雪
步天软件
留言
连连看
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

转载 一个简单T9输入法的实现(有代码) 收藏

新一篇: 传说中的十大完美照片 | 旧一篇: 软件开发公司管理手册 (下)

文章难度:初学者

 

关于T9输入法的核心程序(由我朋友Nix提供),共两个文件,一个是NixInputMethod.h,还有一个是T9.c; 参见附录。

 

具体输入法的实现方法如下:

1.   首先创建一个对话框,然后在其中放入两个控件:IDC_EDIT1 IDC_WORD STATIC控件)

2.   为了实现在Edit中一边输入,STATIC中会出现智能的功能,所以我们的实现如下:

a)         重载函数PreTranslateMessage ,使其能够捕捉到键盘的所有事件,故其实现如下:

BOOL CMy11Dlg::PreTranslateMessage(MSG* pMsg)

{

         try {

                            CWnd* pCtrl = GetFocus();

 

                            /*

                             *      可以通过Enter建进行光标焦点的切换

                             */

                            if (pMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_TAB))

                            {

                                     // get the char index of the caret position

                                     int nPos = LOWORD(m_MyEditCtl.CharFromPos(m_MyEditCtl.GetCaretPos()));

                                    

                                     // select zero chars

                                     m_MyEditCtl.SetSel(nPos, nPos);

                                    

                                     // then replace that selection with a TAB

                                     m_MyEditCtl.ReplaceSel("\t", TRUE);

                                    

                                     // no need to do a msg translation, so quit.

                                     // that way no further processing gets done

                                     return TRUE;

                            } else

 

                            if (GetAsyncKeyState(VK_RETURN))        //       Enter

                            {

                                     switch(pCtrl->GetDlgCtrlID()) {

                                     case IDOK:

                                               if (!reset) {

                                                        AfxMessageBox("OK");

                                                        reset = 1;

                                               } else {

                                                        reset = 0;

                                                        GetDlgItem(IDC_STATIC)->SetFocus();

                                               }

                                               break;

                                     default:

                                               pMsg->wParam = VK_TAB;

                                     }

                            } else

                           

                            /*

                             *      通过123....选择第几个字

                             */

                            if (pMsg->message == WM_KEYDOWN && (isdigit(pMsg->wParam) || (pMsg->wParam >64 && pMsg->wParam < 91))) {

                                     CString str;

                                     if (isdigit(pMsg->wParam)) {

                                               GetDlgItem(IDC_WORD)->GetWindowText(str);

                                              

                                               char* temp = str.GetBuffer(100);

                                               char zi[3];

                                               zi[0] = temp[2*(pMsg->wParam - 48)-2];

                                               zi[1] = temp[2*(pMsg->wParam - 48)-1];

                                               zi[2] = '\0';

                                               pCtrl->SetWindowText(zi);

                                               str.ReleaseBuffer();

 

                                               return TRUE;

                                     }

                                     UpdateData();

 

                                     pCtrl->GetWindowText(str);

                                     str += (pMsg->wParam + 32);

                                     CShincoInputMethod pIME;

                                    

                                     GetDlgItem(IDC_WORD)->SetWindowText(pIME.GetInputString((unsigned char*)str.GetBuffer(100)));

                                     str.ReleaseBuffer();

                            }

                           

                            return CDialog::PreTranslateMessage(pMsg);

         } catch (...) {

         //       AfxMessageBox("Error");

         }

         return TRUE;

}

 

 

         这样基本就可以实现一个输入法了,如果你加上词库的话,就可以实现类似智能ABC之类的东西了,当然那样的话,你还需要多努力努力!

         上面程序只是测试用的,你自己可以重新试试看输入法的实现,如果需要代码,请联系我。

 

附录:

// NixInputMethod.h: interface for the CShincoInputMethod class.

//

//////////////////////////////////////////////////////////////////////

 

#if !defined(AFX_SHINCOINPUTMETHOD_H__40148888_4731_4A49_87CC_4F9CFCAF77A5__INCLUDED_)

#define AFX_SHINCOINPUTMETHOD_H__40148888_4731_4A49_87CC_4F9CFCAF77A5__INCLUDED_

 

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

 

class CNixInputMethod 

{

public:

         unsigned long py_mb_begin;

 

         CString  GetInputString(BYTE input_py_val[]);

         BYTE *py_ime(BYTE input_py_val[]);

                  

         CNixInputMethod();

         virtual ~CNixInputMethod();

};

 

#endif // !defined(AFX_SHINCOINPUTMETHOD_H__40148888_4731_4A49_87CC_4F9CFCAF77A5__INCLUDED_)

 

 

 

/*

 *    T9.c

 */

#include "stdafx.h"

#include "NixInputMethod.h"

 

BYTE PY_mb_a[][255]=

{

         {"阿啊吖锕嗄呵腌"},

         {"哎哀唉埃挨皑癌矮蔼艾爱隘碍"},

         {"安氨鞍俺岸按案胺暗"},

         {"肮昂盎"},

         {"凹敖熬翱袄傲奥澳懊"},

         {"八巴叭扒吧芭疤捌笆拔跋把靶坝爸罢霸"},

         {"白百佰柏摆败拜稗"},

         {"扳班般颁斑搬板版办半伴扮拌绊瓣"},

         {"邦帮梆绑榜膀蚌傍棒谤磅镑"},

         {"包苞胞褒雹宝饱保堡报抱豹鲍暴爆剥薄瀑"},

         {"卑杯悲碑北贝狈备背钡倍被惫焙辈"},

         {"奔本苯笨夯"},

         {"崩绷甭泵迸蹦"},

         {"逼鼻比彼笔鄙币必毕闭庇毖陛毙敝痹蓖弊碧蔽壁避臂"},

         {"边编鞭贬扁卞便变遍辨辩辫"},

         {"彪标膘表"},

         {"憋鳖别瘪"},

         {"宾彬斌滨濒摈"},

         {"冰兵丙秉柄炳饼并病"},

         {"拨波玻钵脖菠播伯驳帛泊勃铂舶博渤搏箔膊卜"},

         {"补哺捕不布步怖部埠簿"},

         {"擦嚓礤"},

         {"猜才材财裁采彩睬踩菜蔡"},

         {"参餐残蚕惭惨灿"},

         {"仓沧苍舱藏"},

         {"操糙曹槽草"},

         {"册侧厕测策"},

         {"层蹭曾"},

         {"叉插查茬茶搽察碴岔诧差刹"},

         {"拆柴豺"},

         {"掺搀谗馋缠蝉产铲阐颤"},

         {"昌猖肠尝偿常厂场敞畅倡唱"},

         {"抄钞超巢朝嘲潮吵炒绰"},

         {"车扯彻掣撤澈"},

         {"郴尘臣忱沉辰陈晨衬趁"},

         {"称撑成呈承诚城乘惩程澄橙逞骋秤"},

         {"吃痴弛池驰迟持尺侈齿耻斥赤炽翅"},

         {"充冲虫崇宠"},

         {"抽仇绸畴愁稠筹酬踌丑瞅臭"},

         {"出初除厨滁锄雏橱躇础储楚处搐触矗畜"},

         {""},

         {"川穿传船椽喘串"},

         {"闯疮窗床创"},

         {"吹炊垂捶锤"},

         {"春椿纯唇淳醇蠢"},

         {""},

         {"疵词茨瓷慈辞磁雌此次刺赐"},

         {"囱从匆葱聪丛"},

         {""},

         {"粗促醋簇"},

         {"蹿窜篡"},

         {"崔催摧脆淬瘁粹翠"},

         {"村存寸"},

         {"搓磋撮挫措错"},

         {"搭达答瘩打大"},

         {"呆歹傣代带待怠殆贷袋逮戴"},

         {"丹单担耽郸胆掸旦但诞弹惮淡蛋氮"},

         {"当挡党荡档"},

         {"刀导岛倒捣祷蹈到悼盗道稻"},

         {"的地得德锝"},

         {"灯登蹬等邓凳瞪"},

         {"低堤滴狄迪敌涤笛嫡底抵地弟帝递第缔蒂"},

         {"掂滇颠典点碘电佃甸店垫惦淀奠殿靛"},

         {"刁叼凋碉雕吊钓掉"},

         {"爹跌迭谍叠碟蝶"},

         {"丁叮盯钉顶鼎订定锭"},

         {""},

         {"东冬董懂动冻侗恫栋洞"},

         {"都兜斗抖陡豆逗痘"},

         {"督毒读犊独堵赌睹妒杜肚度渡镀"},

         {"端短段断缎锻"},

         {"堆队对兑"},

         {"吨敦墩蹲盾钝顿遁"},

         {"多哆夺掇朵垛躲剁堕舵惰跺"},

         {"讹俄娥峨鹅蛾额厄扼恶饿鄂遏"},

         {""},

         {"儿而尔耳洱饵二贰"},

         {"发乏伐罚阀筏法珐"},

         {"帆番翻藩凡矾钒烦樊繁反返犯泛饭范贩"},

         {"方坊芳防妨房肪仿访纺放"},

         {"飞非啡菲肥匪诽吠废沸肺费"},

         {"分吩纷芬氛酚坟汾焚粉份奋忿愤粪"},

         {"丰风枫封疯峰烽锋蜂冯逢缝讽凤奉"},

         {""},

         {""},

         {"夫肤孵敷弗伏扶拂服俘氟浮涪符袱幅福辐抚甫府斧俯釜辅腑腐父讣付妇负附咐阜复赴副傅富赋缚腹覆"},

         {"嘎噶"},

         {"该改钙盖溉概"},

         {"干甘杆肝柑竿秆赶敢感赣"},

         {"冈刚岗纲肛缸钢港杠"},

         {"皋羔高膏篙糕搞稿镐告"},

         {"戈疙哥胳鸽割搁歌阁革格葛隔个各铬咯"},

         {""},

         {"根跟"},

         {"更庚耕羹埂耿梗"},