繁体   English   中英

如何在Winform中获取韩文输入?

[英]How to take Korean input in Winform?

我想在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_IME_COMPOSITION然后命中WM_CHAR

我观察到它键入了第一个字符正确。 例如ㅁ(韩文字符)输入第二个字符。 ㅁㅂㅁ(First char,second char,first 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; 

首先检查语言是韩语还是其他语言,所以如果它是韩语,你必须以不同的方式处理它。

你必须得到开始和结束组成的信息,你必须经常检查它的延续性或组成。 设置mIsImeProcessedtruemIsImeContinuefalse一次,你得到的组成结束WndProc

我们也需要处理退格的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM