北大中文论坛 www.pkucn.com

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
楼主: 路路通

《输入法编程漫谈》问答

[复制链接]
发表于 2008-10-8 16:38:39 | 显示全部楼层
路路通你好:

我想学输入法编程, 现在还在 “小学阶段”, 刚看懂了你的安装的例子。我没学过VC,为了学输入法编程,看了几天书。想请问一下:

1。我看到小学阶段的例子里面有很多函数,每个函数都是要一行行敲入的吗?是不是有些是编辑器自动生成的?
2。我试着运行了“ 初中阶段”的例子,发现输入法窗体很小很小,上面有个蓝色的标题栏比它还大,要怎样处理才象别的输入法那样正常显示?

先谢谢了!
 楼主| 发表于 2008-10-8 17:46:14 | 显示全部楼层
原帖由 dongdonga 于 2008-10-8 16:38 发表
路路通你好:

我想学输入法编程, 现在还在 “小学阶段”, 刚看懂了你的安装的例子。我没学过VC,为了学输入法编程,看了几天书。想请问一下:

1。我看到小学阶段的例子里面有很多函数,每个函数都是要一行行敲入的吗?是不是有些是编辑器自动生成的?
2。我试着运行了“ 初中阶段”的例子,发现输入法窗体很小很小,上面有个蓝色的标题栏比它还大,要怎样处理才象别的输入法那样正常显示?

1、例子的代码是我一行行敲入的,MFC才能自动生成。如果编程基础较差,最好是一行行敲入,这样会加深你的理解和记忆。
2、输入法状态条的大小可自行设计,蓝色的标题是调试用的,可直观的看到一些变量或表达式的值,如果不需要它,将uistatus.c中顶部的#define PRINTF注释掉,重新编译即可。
发表于 2008-10-8 18:38:22 | 显示全部楼层
想问路路通,你是程序中包含智能功能吗,即智能加词功能。另外,能否告诉我你的E-mail,我的邮箱为yzzzz@yahoo.cn
 楼主| 发表于 2008-10-8 19:15:41 | 显示全部楼层
原帖由 ybmzhe 于 2008-10-8 18:38 发表
想问路路通,你是程序中包含智能功能吗,即智能加词功能。另外,能否告诉我你的E-mail,我的邮箱为yzzzz@yahoo.cn


论坛上的程序是供初学者输入法入门的程序,既然是入门程序,力求简单易懂,也就没有所谓的“智能”。“智能加词”是什么意思?是指在线造词吗?

原计划想写些小程序,让码友在编码的过程中能省些体力时间,减少重复劳动,但近来开发任务紧迫,实在抽不开身,只好作罢。

调频和在线造词的功能,以后有空再提供。

如果是本人输入法程序上的疑问,我会尽量第一时间答复,其余问题年内既无时间也没精力,只好说声抱歉。

E-MAIL:mzhkj@163.com
发表于 2008-10-8 20:34:00 | 显示全部楼层
非常感谢路路通的回答!

现在能够比较好的运行程序了!发现了点小小的问题,就是在刚开始输入第一个字时,那个小窗口在屏幕的左上角,并不是在要输入的地方,第二个字时才对。不过这不影响现在的学习。先开始读程序。。。还有就是"Imm.h" 这个文件,我的机子刚装时有个比它还新,不过不能用,会出错,要用路路通提供的才不会出错。请问一下是不是您改动过"Imm.h"这个文件?

非常感谢路路通!我现在在努力学习!
 楼主| 发表于 2008-10-8 21:15:04 | 显示全部楼层
原帖由 dongdonga 于 2008-10-8 20:34 发表
非常感谢路路通的回答!

现在能够比较好的运行程序了!发现了点小小的问题,就是在刚开始输入第一个字时,那个小窗口在屏幕的左上角,并不是在要输入的地方,第二个字时才对。不过这不影响现在的学习。先开始读程序 ...


光标跟随这个问题,由于当时时间比较仓促,只按常规处理,可通过GetFocus()和GetCaretPos(&ptSrc)这两个函数捕获到光标的位置。本帖也有比较详细的讨论,你可以看一下。

Imm.h微软有很多个版本,vc6默认安装的那个版本不能用于输入法编程开发,它连INPUTCONTEXT这个关键的结构都没有,而DDK、SDK等版本的imm.h则比较齐全。程序里的那个imm.h是什么版本的也忘了,反正不是最新版本的。头文件只要有你需用到的结构、函数就行了。
发表于 2008-11-16 16:11:35 | 显示全部楼层

:)

今天试了入门标准程序和安装程序,也不知道是不是算成功了:能打字了,但是界面好像不太对:

状态栏被一个对话框包着,标题的地方经常出现20、40、bb……
又:在Users用户组中不能调用输入法,会提示“找不到码表”,点击“确定”或“取消”后会关闭当前使用输入法的程序,比如ie。
win2003中文版。

另顺便请教:安装程序使用没遇到问题,但想请问,如果我想在复制了mb文件,比如py.txt文件后,设置该文件的属性,让users用户组具有对mb文件的读、写、改等权限,应该怎么做?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2008-11-16 18:27:55 | 显示全部楼层
原帖由 唐捺之 于 2008-11-16 16:11 发表
今天试了入门标准程序和安装程序,也不知道是不是算成功了:能打字了,但是界面好像不太对:
87936
状态栏被一个对话框包着,标题的地方经常出现20、40、bb……
又:在Users用户组中不能调用输入法,会提示“找不 ...


1、“状态栏被一个对话框包着,标题的地方经常出现20、40、bb……” 这是为了调试方便用的。在调试程序的时候,为了直观,将调试信息直接输出到标题栏,是一个不错的主意。如果不需要,在uistatus.c文件的开头处,将#define PRINTF注释掉,重新编译一下即可。

2、本输入法程序没有在win2003中编译过,你所说的问题应该是权限的问题。由于.mb文件放在系统目录下,估计user组没有读写系统文件目录下面文件的权限。进入组策略,看看在“用户权限利指派”中能不能增加user读写系统文件夹下面文件的权限。如果不行,可以将码表文件放在user组有权限的文件目录下,不过这样一来,就要修改mb.c中LoadMB函数中的码表路径:
GetSystemDirectory(szSystemPath, MAX_PATH);
lstrcat(szSystemPath, _T("\\"));
lstrcpy(InFileName, szSystemPath);
将上面三行改成你自己放码表的路径。
发表于 2008-11-27 23:14:52 | 显示全部楼层
请问不同的输入法的表码文件的格式都是相同的吗?还是表码文件的存储格式可以自定义?
 楼主| 发表于 2008-11-28 12:23:53 | 显示全部楼层
原帖由 alwdnnlmqj 于 2008-11-27 23:14 发表
请问不同的输入法的表码文件的格式都是相同的吗?还是表码文件的存储格式可以自定义?


公认的叫法应该是“码表”吧,“表码”的称谓第一次看到。

码表的格式随便,只要方便你查找就行。
简洁、高效是目标。
发表于 2008-12-2 17:03:59 | 显示全部楼层
路路通,我想在输入法里增加一个像软键盘那样的功能,怎么增加?
如果能够显示候选项的功能,并且可以用鼠标选择候选项那样就好了,就像数字五笔那样。
 楼主| 发表于 2008-12-2 18:03:49 | 显示全部楼层
原帖由 三三龙 于 2008-12-2 17:03 发表
路路通,我想在输入法里增加一个像软键盘那样的功能,怎么增加?
如果能够显示候选项的功能,并且可以用鼠标选择候选项那样就好了,就像数字五笔那样。


1、由于路路通键盘的“按键”多多,因此不怎么关注过软键盘的功能,以后有时间补上。
2、你所说的“用鼠标选择候选项”是用鼠标代替键盘选择候选框中的汉字,分3步:
     a、将每个候选项所占的宽度保存在一个数组里。
     b、判断鼠标的坐标在那个候选项的矩形域内,从而计算出点击候选项的序号。
     c、将点中的候选字上屏。
发表于 2008-12-2 18:45:34 | 显示全部楼层
原帖由 路路通 于 2008-12-2 18:03 发表


1、由于路路通键盘的“按键”多多,因此不怎么关注过软键盘的功能,以后有时间补上。
2、你所说的“用鼠标选择候选项”是用鼠标代替键盘选择候选框中的汉字,分3步:
     a、将每个候选项所占的宽度保存在一个 ...

谢谢你的答复,我在网上找到了两个源代码,经过简单的测试,感觉这个比较好,现在放上来。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2008-12-2 20:46:32 | 显示全部楼层
原帖由 三三龙 于 2008-12-2 18:45 发表

谢谢你的答复,我在网上找到了两个源代码,经过简单的测试,感觉这个比较好,现在放上来。


啊,你这个是屏幕软键盘,不是输入法程序的那种软键盘。
我有一个老外写的,跟你这个非常非常相像。
发表于 2008-12-2 22:53:10 | 显示全部楼层
原帖由 路路通 于 2008-12-2 20:46 发表


啊,你这个是屏幕软键盘,不是输入法程序的那种软键盘。
我有一个老外写的,跟你这个非常非常相像。


啊,那么,输入法程序就不能够使用它了?那样怎么办啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大中文系 ( 京ICP备12040209号

GMT+8, 2016-3-24 20:42 , Processed in 0.139280 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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