操纵IFELanguage脱离中文语句并对汉字加注拼音[VC/C++编程]
本文“操纵IFELanguage脱离中文语句并对汉字加注拼音[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
这篇文档是讲若何操纵IFELanguage接口实现对中文语句的脱离,并对词语和字加注拼音的办法.
首先感激一下Zswang(伴水)兄弟,他的无私奉献精神和对Windows的深化研究值得我们每一个人学习.每次找到好东东他老是给我一份,包含这个IFELanguage接口资料.最初的资料源自一个日本网站,源代码是用VC8写的,Zswang(伴水)将其改写为一个实用于Delphi下的版本.原C++代码经ccrun(老妖)略作改正,在BCB6下调试通过.原VC8的版本和BCB6还有Zswang(伴水)写的Delphi例子代码都一同打包并上传到[通例代码]区,有爱好的朋友可以下载了研究一下.
首先需求初始化OLE:
#include<ole2.h>
OleInitialize(NULL);
当然,记的在程序完毕的时刻清场:
CoUninitialize();
我们需一个C++下用的msime.h或Delphi下的msime.pas(感激Zswang),这个文件里包含了IFELanguage接口,IFECommon接口等声明,还有一些常量和构造的声明,好在已经有人替我们做了这部份工作.^_^你只需下载了利用便可以.
#include"msime.h"
//定义IFELanguage接口的IID
staticconstIIDIID_IFELanguage=
{
0x019f7152,0xe6db,0x11d0,
{0x83,0xc3,0x00,0xc0,0x4f,0xdd,0xb8,0x2e}
};
//指定利用的语言,我们的例子利用简体中文,其他还有:
//MSIME.China
//MSIME.Japan
//MSIME.Taiwan
//MSIME.Taiwan.ImeBbo
LPCWSTRmsime=L"MSIME.China";
CLSID clsid;
if(CLSIDFromString(const_cast<LPWSTR>(msime),&clsid)!=S_OK)
// 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=1028&d=r0j832
return;
//成立一个IFELanguage的COM实例,得到接口指针
IFELanguage*pIFELanguage;
if(CoCreateInstance(clsid,NULL,CLSCTX_SERVER,
IID_IFELanguage,(LPVOID*)&pIFELanguage)!=S_OK)
return;
if(!pIFELanguage)
return;
//翻开
if(pIFELanguage->Open()!=S_OK)
{
pIFELanguage->Release();
return;
}
//
DWORDdwCaps;
if(pIFELanguage->GetConversionModeCaps(&dwCaps)!=S_OK)
{
pIFELanguage->Close();
pIFELanguage->Release();
}
//要解析的中文句子
WideStringwstrInput=WideString("汉字加拼音演示妖哥万岁");
MORRSLT*pmorrslt;
//通过GetJMorphResult办法为汉字加注拼音
if(pIFELanguage->GetJMorphResult(
FELANG_REQ_REV,
FELANG_CMODE_PINYIN|
FELANG_CMODE_NOINVISIBLECHAR,
wstrInput.Length(),wstrInput,NULL,&pmorrslt)!=S_OK)
{
pIFELanguage->Close();
pIFELanguage->Release();
}
if(!pmorrslt)
{
pIFELanguage->Close();
pIFELanguage->Release();
}
//将句子脱离成词语并单独加注拼音
WideStringwstrOutput,wstrWord,wstrPinYin;
wstrOutput=WideString(pmorrslt->pwchOutput);
wstrOutput=wstrOutput.SubString(1,pmorrslt->cchOutput);
//pmorrslt->cWDD是脱离后单词的个数(英文单词一个字母算一个)
for(inti=0;i<pmorrslt->cWDD;i++)
{
//读取每段的词语或字
wstrWord=wstrInput.SubString(
pmorrslt->pWDD[i].wReadPos+1,
pmorrslt->pWDD[i].cchRead);
//读取每段的拼音
wstrPinYin=wstrOutput.SubString(
pmorrslt->pWDD[i].wDispPos+1,
pmorrslt->pWDD[i].cchDisp);
//
if(wstrPinYin.Length()>0)
wstrWord=wstrWord+"("+wstrPinYin+")";
//输出后果,我这里仅仅是输出到一个Memo中,在你的利用中记的更改此处,不然编译不过期你又有设法了.
Memo1->Lines->Add(wstrWord);
}
//记的清场咯
CoTaskMemFree(pmorrslt);
pIFELanguage->Close();
pIFELanguage->Release();
附件中有一个IMEEngine类,原作者大概是个日本程序员.类里仅仅实现了GetJMorphResult的封装,大家可以按照自己的需求自己扩大一下.貌似可以获得汉字的笔画,假如你完成了这部份功效,但愿能将代码给我一份: cbfans#163.com,谢谢.
以上是“操纵IFELanguage脱离中文语句并对汉字加注拼音[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |