All Stories
在网上无意间搜索到五笔爱好者论坛中的一个老旧的帖子,是五笔加加Plus的作者EasyCode提到的,他列出了几十行的反汇编代码,仔细看了一下,翻译成C代码后一试,居然真的能在Firefox中实现光标跟随了,真是太高兴了!这样,小乖输入法更具有实用性了,之前一直自己都怪它不能在Firefox中实现光标跟随,所以一直不用它,不过在其它环境下,比如公司里只用notes时,也已经慢慢改成只用小乖输入法了,呵呵。 现在还有些问题是,Release模式下,输入英文超过10个后,会崩溃。另外,缺少一个造词的功能。再有,状态窗口不会自动跟随主窗口。 辅助工具也整了一下,可以画出位图来了,设置对话框基本上可以用了。WTL就是没有文档不好,不过幸亏它的类名,方法名这些都有点模仿MFC的样子,还勉强可以猜一下,在猜不到的情况下,直接用API也是可以的,呵呵。
今天在整一个属性对话框,用WTL三四行代码就能整出一个来,不得不让我感叹类库对于开发效率提升的重大作用啊!想想曾经用纯C+SDK画过一个,费了好大的劲啊!以后没什么特殊要求的话,尽量用WTL了!
贫穷的人只能以贫穷的方式向自己在意的人祝福。 昨天忙乎了半个晚上,想今天给小丫头一个小小的惊喜,结果今天发现昨晚最后打包成安装程序的时候还是出了问题,枉费了我画了好一会儿的splash了。 不过大部分主要的功能还都是按照预期实现了,呵呵。 小丫头生日快乐哦!
今天突然灵光乍现,觉得这个输入法里可以嵌入Lua解释器,用来作些额外处理。当前想到的可以让Lua处理的事务主要是有些零碎的任务,比如将特定的组合字串翻译成另外的候选字串,比如在可以在词库中添加一条记录wygd,对应的五笔应该是“今天”,但在用户词库里多加一条记录对应是%%today,然后在匹配的时候发现%%,就取出后面的today,然后调用名为today的Lua函数,并把组合字串和当前的输入法模式作为参数传递给该函数,函数应该根据实际情况,返回诸如“2007年6月18日”之类的字符串,这样就可以扩展输入法的词库了,而这个词库里的内容是可以根据实际情况自动变化的,并且不需要修改输入法的源代码。不错不错,这是很好的一个使用Lua的场合啊。加入解释器后,Debug模式下ime文件是1MB左右,Release模式下是400KB,也不是很大,用UPX最高级压缩一下,可以减小到200KB左右,呵呵。
今天用WTL写一个输入法的辅助工具,到了后来,又发现Release模式下链接不了了,看来不是个别现象了,最后排查到,到了C++标准库,就会有问题,报符号定义冲突的错误。这次忍不住了,上google搜了一下,发现msdn论坛上一个帖子说,只要在设置工程属性的地方,把链接ATL为最小化CRT改成no就解决了,试了下,果然ok了。亏我当时还郁闷了一天就放弃了,看来在Windows下开发不上msdn不行啊,尤其是用VC了,就更应该上msdn的论坛了,难得有英文的这种Web形式的技术论坛,呵呵,都已经有点思维惯性了,以为老外只喜欢maillist或newsgroup的。 用WTL写了两个小程序后(都还没写完),觉得WTL真的不错,不过编译速度感觉有点慢了,不知道是不是因为这些天只是用来编译C程序,对速度的感觉已经被影响。但是生成的文件小巧啊,我到现在还没弄明白,到底什么时候,会链接进来那个msvc**71.dll之类名字的文件进来,反正这两个程序里都没链接进来,也许是因为太简单吧。 WTL形式上有点像MFC,一个窗口会有View类,一个对话框会有对话框类,然后有消息映射宏,宏里写上了对应的消息名字和消息处理函数名,再在处理函数里填上相应代码就行了。不过实质上,我也知道是极大不同的。
自己可以弄到试用版的C++Builder2007来,花了好多时间,重装卸载了好几次,终于还是放弃了,怎么样都不行,总是在启动的时候报个错就退出了。真是失望啊!这样一来,也促成了我不写代码的借口,呼呼。 上午去百草园的社康中心看了看,好多人在体检,看个病还得预约啊!不过,医生说我只是咽液性囊肿,不要紧,总算放心了。 又改了两个输入法的bug,现在在msn messager里也能正常显示内容了,真是奇怪,有的程序就是不发消息过来,晕!想想五笔加加真是牛啊,这么多年前的东西,做出这么稳定、兼容性这么好来,不得不佩服啊! 总是嫌钱少,可是又没什么行动。我得打三份工才行啊!
话说当时,自以为5月底能全部做完的事情,其实直到今天都没有完全完成。不过总算总的框架搭出来了,绝大部分应该有的功能也都有了,剩下的就是修修补补了。但再想想,更多的时候,是很没自信,那些功能的代码也写完了好多天了,但一直都没信心,连运行一下都不敢,生怕有什么问题。这是一种病态的心理,而且这样对于事情的发展没有丝毫的好处,显而易见的是各种坏处,躲得过初一躲不过十五,总归要做的。昨天把一个重要部分重构了,真是爽快啊,以后有些东西的修改,只要改一下外部的配置文件就行了,不用改代码重新编译了。今天确认完成了另外一个重要部分的功能,也基本能用了,易用性方面还有待改善。 再来说说这个输入法。说到那个某些程序下候选窗口出不来的问题找到原因后,异常兴奋,至少这个输入法已经从不可用,变为偶尔可用一下的地步了。到今天,又找到了另外一个严重问题的原因。有时候词库会乱,是因为词频调整部分没仔细,很容易遇到写乱的情况。另一大进步是,总算搞清楚了几种词库格式,可以写个词库维护工具了,呵呵。
被一个老大叫去讨论什么东西,唉,反正很头大,夹死人的事。结果到后来我也没力气说了,他也小声说了,再后来我走到自己的位子上,发现怎么天都黑了,我都还没反应过来,看看周围也很安静的样子,也还是没反应过来。同事们见到我很奇怪,还以为今天有什么事,我才反应过来,已经7点多了,我还没吃饭。 今天就觉得很丧气,觉得自己挺可怜的。然后想着随便找个人一起过,就这样庸庸碌碌过一辈子算了。
经过查看DDK中的IME源代码,学习了一下后,发现有一个办法可以算是避规那个在某些程序中显示不出候选窗口的问题。只要在接收到某个通知的时候,强制移动一下候选窗口就可以了,不过光标跟随问题没有解决,它只能固定地停在一个位置,不过也已经算是重大进步了,哈哈,真是开心啊。可以搞一下词库以及内部表示的问题了,不时地出现一下词库乱掉的问题,很恼火的!