c# – 如何在Winform中采用韩文输入?

c# – 如何在Winform中采用韩文输入?,第1张

概述我想在一个winform应用程序中的ediatble区域中输入韩文文本. 但是字符重复,我试图覆盖默认的WndProc,但没有任何工作. switch (m.WParam.ToInt32()) {case Common.Interop.Window.WM_IME_CHAR: break; case Comm 我想在一个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的情况.

总结

以上是内存溢出为你收集整理的c# – 如何在Winform中采用韩文输入?全部内容,希望文章能够帮你解决c# – 如何在Winform中采用韩文输入?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1260567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存