但是字符重复,我试图覆盖默认的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的情况.
总结以上是内存溢出为你收集整理的c# – 如何在Winform中采用韩文输入?全部内容,希望文章能够帮你解决c# – 如何在Winform中采用韩文输入?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)