gpt4 book ai didi

c# - 如何在Winform中输入韩文?

转载 作者:可可西里 更新时间:2023-11-01 09:16:04 26 4
gpt4 key购买 nike

我想在 winform 应用程序的可编辑区域中输入韩语文本。

但是字符在重复,我试图覆盖默认的 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;

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

您必须获取 Start 和 End 组合的信息,并且您必须始终检查它是否是字符或组合的延续。将 mIsImeProcessed 设置为 true 并将 mIsImeContinue 设置为 false 一旦你在 WndProc.

我们也需要处理退格键的大小写。

关于c# - 如何在Winform中输入韩文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41931211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com