[英]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;
首先检查语言是韩语还是其他语言,所以如果它是韩语,你必须以不同的方式处理它。
你必须得到开始和结束组成的信息,你必须经常检查它的延续性或组成。 设置mIsImeProcessed
以true
和mIsImeContinue
给false
一次,你得到的组成结束WndProc
。
我们也需要处理退格的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.