MFC 用Imm类库实现输入法修改输入模式

1.导入Imm类库,电脑里都有

cpp 复制代码
#include <Imm.h>
#pragma comment(lib, "imm32.lib")

2.在想要的地方增加代码

cpp 复制代码
HIMC himc = ImmGetContext(m_hWnd);
	if (himc != NULL) {
		ImmSetOpenStatus(himc, TRUE);
		ImmNotifyIME(himc, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
		DWORD dwConvMode, dwSentMode;
		if (!ImmGetConversionStatus(himc, &dwConvMode, &dwSentMode)) {
			AfxMessageBox(_T("无法获取当前转换状态"));
		} else {
			// 尝试设置为平假名模式
			// 对搜狗输入法无效 对谷歌日语输入法有效
			if (!ImmSetConversionStatus(himc, IME_CMODE_NATIVE, dwSentMode)) {
				AfxMessageBox(_T("设置平假名模式失败"));
			} else {
				//AfxMessageBox(_T("成功设置为平假名模式"));
			}
		}
		ImmReleaseContext(m_hWnd, himc);
	}

这里是对这三个函数调用的作用进行解释:
ImmSetOpenStatus(hIMC, TRUE);

作用:该函数用于设置输入上下文(Input Context)的打开状态。 参数: hIMC:输入上下文的句柄。

TRUE:表示将输入上下文打开,允许输入法处理器进行输入处理。 注意:打开输入法上下文后,输入法处理器将被启用并可以处理输入。
ImmNotifyIME(hIMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0);

作用:该函数用于向输入法处理器发送通知消息,取消正在进行的输入组合字符串(Composition String)的处理。 参数:

hIMC:输入上下文的句柄。 NI_COMPOSITIONSTR:通知类型,表示取消组合字符串的操作。

CPS_CANCEL:指定取消当前组合字符串的方式。 0:额外参数,通常可以设为0。

注意:在切换输入法输入模式时,可能需要取消当前的组合字符串,以清空输入状态。
ImmSetConversionStatus(hIMC,IME_CMODE_NATIVE, dwSentMode);

作用:该函数用于设置输入法的转换状态,指定输入法的模式。 参数: hIMC:输入上下文的句柄。

IME_CMODE_NATIVE:表示切换到日语平假名的输入模式。 dwSentMode:转换模式标志,通常可以设为0。

注意:通过这个函数,您可以设置输入法的转换状态,例如切换到日语平假名、片假名输入模式等。

这些函数通常用于与输入法处理器进行交互,控制输入法的状态和输入模式。在使用这些函数时,请确保了解其参数含义并根据需要进行正确配置,以实现您所需的输入法操作。

相关推荐
apcipot_rain9 小时前
C++转Java日记(03)
java·开发语言·c++
布莱克6059 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
xys_67810 小时前
深挖C++:类和对象(中)
开发语言·c++
D e re k ZH12 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
xiaoye-duck13 小时前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
zaizai100714 小时前
【Effective Modern C++】学习第一章
c++
Fruiticecake14 小时前
C 程序员速通现代 C++(一):lambda、std::function、移动语义与智能指针
c语言·c++
青少儿编程课堂15 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
坤坤子吖17 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
一晌小贪欢18 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公