输入法管理器功能 - 正确的平假名到汉字候选列表c ++转换的调用顺序

问题描述 投票:0回答:1

我正在尝试将Hiaragana角色转换为候选人名单(汉字)。看起来应该可以使用输入法管理器功能,但它不能按我的预期工作。 我安装了日语语言包,我可以在文本编辑器中打开IME,因此应该启用一些功能。

在src中我们有:

HIMC context = ImmCreateContext();//non-NULL result
bool result = ImmSetOpenStatus(context, true);//result == true
std::wstring wstr = L"こいび";//Hiragana string for conversion
result = ImmSetConversionStatus(context, IME_CMODE_JAPANESE, IME_SMODE_NONE);//result == true
result = ImmSetCompositionString(context, SCS_SETSTR, (LPVOID)wstr.c_str(), wstr.length(), NULL, 0);//result == true
DWORD listCount = 0;
DWORD lpdResult = 0;
lpdResult = ImmGetCandidateListCount(context, &listCount);//listCount == 0, lpdResult  == 144

看起来它以某种方式工作,但我总是得到类似的结果(我检查它的标准字母,更短的JPN字符串和创建std :: string +转换为wstring)。 不幸的是我没有找到与之相关的例子,所以也许我没有打电话或者我打错了顺序。 MS documentation没有太多关于它的细节,所以我不确定是什么问题。

c++ winapi ime
1个回答
1
投票

Imm功能必须在窗口消息循环中使用。

例如,https://docs.microsoft.com/en-us/windows/desktop/api/Imm/nf-imm-immgetcandidatelistcounta看起来评论部分。

“应用程序通常在响应IMN_OPENCANDIDATE或IMN_CHANGECANDIDATE命令时调用此函数。”

当消息循环类型为“IMN_OPENCANDIDATE”或“IMN_CHANGECANDIDATE”时,您可以使用immgetcandidatelistcount函数。

© www.soinside.com 2019 - 2024. All rights reserved.