`
isiqi
  • 浏览: 16496790 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

阅读更多

文章难度:初学者<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

关于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_<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="4" unitname="a">4A</chmetcnv>49_87CC_<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="4" unitname="F">4F</chmetcnv>9CFCAF<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="77" unitname="a">77A</chmetcnv>5__INCLUDED_)

#define AFX_SHINCOINPUTMETHOD_H__40148888_4731_<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="4" unitname="a">4A</chmetcnv>49_87CC_<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="4" unitname="F">4F</chmetcnv>9CFCAF<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="77" unitname="a">77A</chmetcnv>5__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_<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="4" unitname="a">4A</chmetcnv>49_87CC_<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="4" unitname="F">4F</chmetcnv>9CFCAF<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="77" unitname="a">77A</chmetcnv>5__INCLUDED_)

/*

* T9.c

*/

#include "stdafx.h"

#include "NixInputMethod.h"

BYTE PY_mb_a[][255]=

{

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

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

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

{"肮昂盎"},

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

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

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

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

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

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

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

{"奔本苯笨夯"},

{"崩绷甭泵迸蹦"},

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

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

{"彪标膘表"},

{"憋鳖别瘪"},

{"宾彬斌滨濒摈"},

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

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

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

{"擦嚓礤"},

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

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

{"仓沧苍舱藏"},

{"操糙曹槽草"},

{"册侧厕测策"},

{"层蹭曾"},

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

{"拆柴豺"},

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

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

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

{"车扯彻掣撤澈"},

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

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

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

{"充冲虫崇宠"},

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

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

{""},

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

{"闯疮窗床创"},

{"吹炊垂捶锤"},

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

{""},

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

{"囱从匆葱聪丛"},

{""},

{"粗促醋簇"},

{"蹿窜篡"},

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

{"村存寸"},

{"搓磋撮挫措错"},

{"搭达答瘩打大"},

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

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

{"当挡党荡档"},

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

{"的地得德锝"},

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

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

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

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

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

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

{""},

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

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

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

<p c
分享到:
评论

相关推荐

    T9中文输入法的简单实现

    文件“t9_input”可能包含了T9输入法的实现代码、词库数据、预测算法的具体实现或者测试用例。通过分析这个文件,我们可以深入理解T9输入法的内部工作机制,包括字符编码规则、词库构建方法、预测算法的细节等。 ...

    T9输入法——vs2008

    【T9输入法——VS2008】是一款在Visual Studio 2008环境下开发的T9输入法实现,它允许用户通过简单的数字键操作输入汉字,特别适合于手机和其他小型设备上使用。T9输入法的核心在于其高效的文本预测和自动补全功能,...

    基于VC的T9输入法

    【基于VC的T9输入法】是一种在计算机编程中实现的简单T9输入法系统,主要针对的是非触摸屏设备,如早期的手机。T9(Text on Nine)输入法是一种高效的文字输入技术,它通过键盘上的9个数字键来输入英文字母、数字和...

    Wince T9中文输入法

    【描述】:“evc实现的T9输入法,也是从网上下载的和大家分享一下。” EVC,全称Embedded Visual C++,是微软为开发Windows CE应用提供的一款集成开发环境。利用EVC,开发者可以编写C++代码来创建适用于Windows CE...

    T9输入法源代码

    6. **用户界面**:虽然单片机界面通常较为简单,但T9输入法仍需要一个直观的用户交互设计,让用户能够轻松地选择正确的单词或短语。 7. **适应性**:T9输入法应该能适应不同的输入习惯和语言环境,包括多语言支持和...

    T9输入法_t9输入法拼音_STM32F103_源码.zip

    总之,这个"T9输入法_t9输入法拼音_STM32F103_源码.zip"文件为嵌入式开发人员提供了一个在STM32F103微控制器上实现T9拼音输入法的机会,使他们在资源有限的设备上也能实现高效的文字输入功能。对于想要深入学习...

    pascal语言的T9拼音输入法

    一个简单的实现方法是,对于每个拼音串,计算它在词汇库中出现的次数,然后返回出现次数最多的匹配结果。更高级的算法可能会考虑上下文信息,例如,根据前面输入的拼音来调整预测结果的权重。 最后,我们需要实现...

    单片机T9拼音输入法测试程序与说明文档

    开发者可以参考这些资料,结合自己的单片机硬件环境进行定制化开发,实现一个适合自己项目的中文输入解决方案。 总的来说,单片机T9拼音输入法是嵌入式系统中实现中文输入的有效途径,它不仅降低了硬件需求,还提高...

    WPF简单T9键盘英文输入法

    在Windows Presentation Foundation(WPF)框架中,实现一个简单的T9键盘英文输入法涉及到多个技术层面,包括但不限于用户界面(UI)设计、事件处理、数据绑定以及窗体行为控制。本篇将深入探讨如何在WPF环境中构建...

    T9输入法的proteus仿真,51单片机C语言

    在这个项目中,Proteus将用于模拟T9输入法的硬件系统,帮助开发者在虚拟环境中验证代码的正确性。 51单片机是基于Intel 8051微处理器的一种广泛应用的单片微型计算机。它具有内置的CPU、RAM、ROM、I/O口等资源,...

    T9拼音输入法Keil工程文件.rar

    t9.c是主要的源代码文件,实现了T9拼音输入法的核心算法。51t9py_indexa.h和PY_MB.h可能是头文件,包含了常量定义、函数声明等,为T9拼音输入法的实现提供了必要的数据结构和接口。 t9.lnp和t9.LST是编译过程中产生...

    t9Input-stm32

    从标签“t9 输入法 嵌入式”我们可以推断,这是一个针对嵌入式设备的T9输入法实现,可能是为了在资源有限的嵌入式系统上提供文字输入功能,比如简单的物联网设备或者手持设备。 压缩包内的文件“t9ime.c”和“t9ime...

    T9拼音输入法的proteus仿真,51单片机C语言

    在51单片机的有限资源下,优化内存管理和算法效率是实现T9输入法的关键。 在项目"Project"中,可能包含了C语言编写的源代码、配置文件以及其他相关文档,这些文件是实现T9拼音输入法的详细步骤。"说明.txt"文件则...

    STM32F429实现T9拼音输入法【STM32F42X系列单片机_HAL库驱动】.zip

    在这个项目中,开发者实现了T9拼音输入法,这是一种在有限的键盘上快速输入汉字的算法,特别适合于手机和小型设备。下面将详细介绍STM32F429与T9拼音输入法的实现以及HAL库驱动的相关知识点。 1. STM32F429核心特性...

    Visual Basic中的键盘输入法.rar_visual basic_用VB写个T9键盘的程序_输入法 _键盘

    本文将深入探讨如何在VB中实现键盘输入,特别是如何构建一个类似于手机上的T9输入法的程序。 首先,理解VB中的基本键盘事件处理是至关重要的。在VB窗体中,我们可以使用`KeyDown`和`KeyUp`事件来捕获用户按下和释放...

    用51单片机实现拼音输入法

    - 这个压缩包很可能是包含实现51单片机拼音输入法所需库文件和示例代码的资源,可能包括驱动程序、拼音处理函数以及与12864液晶屏交互的代码。 总的来说,用51单片机实现拼音输入法是一项挑战性的工作,需要充分...

    论文研究-基于微处理器的中文输入法的实现 .pdf

    µCOS-II是一个实时操作系统,具有任务调度、时间管理、内存管理等基础功能,但并不包含复杂的外围服务如文件系统和网络管理。其被选为本文的软件平台,主要因为它的轻量级特点能够更好地适应资源受限的微处理器环境...

    C++模拟T9键盘

    本项目是用C++语言实现的一个简单的T9键盘模拟器,支持输入大小写字母和数字。 C++是一种通用、面向对象的编程语言,具有高效、灵活性和丰富的库支持。在实现T9键盘模拟时,我们需要考虑以下几个关键知识点: 1. ...

    51单片机模拟手机拼音输入法

    提供的压缩包中,"一个输入法的代码"很可能是实现这些功能的C语言源代码,可以从中学习到如何在51单片机上处理键盘输入、执行拼音转换和词语联想等操作。"键盘拼音输入(类似Motolora手机拼音输入)"可能是一个演示...

Global site tag (gtag.js) - Google Analytics