【发布时间】:2017-06-15 07:59:44
【问题描述】:
我想在 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。
我观察到它输入的第一个字符是正确的。 例如ㅁ(韩文) 在输入第二个字符时。 ㅁㅂㅁ(第一个字符,第二个字符,第一个字符)。 我想要记事本中的行为
【问题讨论】:
-
也显示 switch 语句。
-
这个链接可能会对您有所帮助。 stackoverflow.com/questions/3287180/…
-
是什么样的控件?一个标准的
TextBox?它以某种方式被子类化了吗?因为否则它应该可以正常工作。记事本中的文本区域也是基于一个普通的 EDIT 控件,它默认连接了所有需要的 IME 内容。 WPF 将是另一回事,但 WinForms 则不然。 -
控件基本上是第三方控件,他们没有处理,我必须从windows端代码处理。我正在将输入字符从 c# 代码传递给第三方 dll
-
您在文森特麦克纳布的回答下方发布了它的帮助(第 3 条评论中的链接),这是否意味着这个问题可以关闭?