Windows 下临时禁用输入法
目前遇到一个需求,是要在弹出右键菜单时禁用掉输入法。找了一圈没找到 Qt 的比较简单的实现,目前只实现了 Windows 下的处理。
#ifdef Q_OS_WIN
class IMEBlocker
{
public:
explicit IMEBlocker(QWidget *pWidget)
: m_hWND(pWidget ? pWidget->winId() : nullptr)
, m_hIMC(nullptr)
{
if (m_hWND)
m_hIMC = ::ImmAssociateContext(m_hWND, nullptr);
}
~IMEBlocker()
{
if (m_hWND)
::ImmAssociateContext(m_hWND, m_hIMC);
}
private:
HWND m_hWND;
HIMC m_hIMC;
};
#endif
#ifdef Q_OS_WIN
#define DISABLE_IME_TEMPORARY\
__pragma(comment(lib, "imm32.lib"))\
Utils::IMEBlocker _ime_block(this);
#else
#define DISABLE_IME_TEMPORARY
#endif