c# – 如何在Winform中采用韩文输入?
发布时间:2020-12-15 03:43:29 所属栏目:百科 来源:网络整理
导读:我想在一个winform应用程序中的ediatble区域中输入韩文文本. 但是字符重复,我试图覆盖默认的WndProc,但没有任何工作. switch (m.WParam.ToInt32()) {case Common.Interop.Window.WM_IME_CHAR: break; case Common.Interop.Window.WM_IME_ENDCOMPOSITION: Pas
我想在一个winform应用程序中的ediatble区域中输入韩文文本.
但是字符重复,我试图覆盖默认的WndProc,但没有任何工作. switch (m.WParam.ToInt32()) { case Common.Interop.Window.WM_IME_CHAR: break; case Common.Interop.Window.WM_IME_ENDCOMPOSITION: PassCharToScreen(m); break; case Common.Interop.Window.WM_CHAR: PassCharToScreen(m); break; case Common.Interop.Window.WM_IME_NOTIFY: break; case Common.Interop.Window.WM_IME_COMPOSITION: PassCharToScreen(m); break; case Common.Interop.Window.WM_IME_COMPOSITIONFULL: break; 当我输入英文时,断点点击WM_CHAR,但当我输入韩文时,它会在第一个字符上点击WM_IME_COMPOSITION,然后在第一个字符之后,首先点击WM_IME_COMPOSITION然后点击WM_CHAR. 我已经观察到它的第一个字符正确. 解决方法
我以某种方式解决了这个问题,我在这里写信帮助别人.
如果代码中有任何错误,请通知我. private bool mIsImeProcessed = true; private bool mIsImeContinue = false; case WM_IME_COMPOSITION: { if (mKoreanInput == true) { long lParam = m.LParam.ToInt64(); long wParam = m.WParam.ToInt64(); char c = (char)m.WParam; if (lParam == 24600) { if (mIsImeProcessed) { mIsImeProcessed = false; mIsImeContinue = false; PassCharToThirdParty(m); } else { PassCharToThirdPartyWithBackSpace(((char)m.WParam).ToString()); } mIsImeContinue = true; } } else if (lParam == 2048) { if (mIsImeProcessed) { } else { if (mIsImeContinue == true) { PassCharToThirdPartyWithBackSpace(((char)m.WParam).ToString()); } } mIsImeProcessed = true; } else { PassBackSpaceToThirdParty(); } } break; case Common.Interop.Window.WM_IME_ENDCOMPOSITION: if (mKoreanInput == true) { mIsImeProcessed = true; mIsImeContinue = false; } break; 首先检查语言是韩语还是其他语言,所以如果韩语你要处理不同. 您必须获取开始和结束组合的信息,您必须始终检查其是否延续字符或构图.在WndProc中得到结束结束后,将mIsImeProcessed设置为true并将mIsImeContinue设置为false. 我们需要处理backspace的情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |