⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imeengine.cpp

📁 这篇文档是讲如何利用IFELanguage接口实现对中文语句的分隔
💻 CPP
字号:
//---------------------------------------------------------------------------
// IMEEngine.cpp: implementation of the IMEEngine class.
//
// 原出处:http://www.mihai-nita.net/article.php?artID=20051215a
// ccrun(老妖)略作修改, 感谢Zswang(伴水)推荐
//---------------------------------------------------------------------------

#include "IMEEngine.h"

//---------------------------------------------------------------------------
// Construction/Destruction
IMEEngine::IMEEngine() : m_bCoInit(FALSE), m_bCoCreat(FALSE), m_bLangOpen(FALSE), m_pmorrslt(NULL)
{
	OleInitialize(NULL);
	m_bCoInit = TRUE;

	SetIMEEngine(L"MSIME.China");
}
//---------------------------------------------------------------------------
IMEEngine::~IMEEngine()
{
	UnsetIMEEngine();

	if(m_bCoInit) {
		CoUninitialize();
		m_bCoInit = FALSE;
	}
}
//---------------------------------------------------------------------------
BOOL IMEEngine::IsReady()
{
	return m_bLangOpen;
}
//---------------------------------------------------------------------------
HRESULT IMEEngine::GetJMorphResult(DWORD dwRequest, DWORD dwCMode, const WCHAR *pwchInput)
{
	if(!IsReady())
		return S_FALSE;

	if(m_pmorrslt) {
		CoTaskMemFree(m_pmorrslt);
		m_pmorrslt = NULL;
	}
	return m_pIFELanguage->GetJMorphResult(dwRequest, dwCMode,
		static_cast<INT>(wcslen(pwchInput)), const_cast<WCHAR*>(pwchInput),
		NULL, &m_pmorrslt);
}
//---------------------------------------------------------------------------
HRESULT IMEEngine::SetIMEEngine(LPCWSTR msime)
{
	static const IID IID_IFELanguage =
    {
        0x019f7152, 0xe6db, 0x11d0,
        { 0x83, 0xc3, 0x00, 0xc0, 0x4f, 0xdd, 0xb8, 0x2e }
    };
    
	UnsetIMEEngine();

	CLSID	clsid;
	if(CLSIDFromString(const_cast<LPWSTR>(msime), &clsid) != S_OK)
		return S_FALSE;

	if(CoCreateInstance(clsid, NULL, CLSCTX_SERVER,
            IID_IFELanguage, (LPVOID*)&m_pIFELanguage) != S_OK)
		return S_FALSE;
	
	m_bCoCreat = TRUE;

	if(m_pIFELanguage)
		if(m_pIFELanguage->Open() == S_OK)
			m_bLangOpen = TRUE;

	m_pIFELanguage->GetConversionModeCaps(&m_dwCaps);
	wcsncpy(m_ImeName, msime, wcslen(m_ImeName));

	return S_OK;
}
//---------------------------------------------------------------------------
void IMEEngine::UnsetIMEEngine(void)
{
	if(m_pmorrslt) {
		CoTaskMemFree(m_pmorrslt);
		m_pmorrslt = NULL;
	}

	if(m_bLangOpen) {
		m_pIFELanguage->Close();
		m_bLangOpen = FALSE;
	}

	if(m_bCoCreat) {
		m_pIFELanguage->Release();
		m_bCoCreat = FALSE;
	}

	m_dwCaps = 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -