Как принять корейский ввод в Winform?
Я хочу напечатать корейский текст в моей области пищевого продукта внутри приложения 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
,
Я заметил, что он вводит первый символ правильно. например, ㅁ (корейский символ) при наборе второго символа. First (Первый символ, второй символ, первый символ). Я хочу, чтобы поведение, как это в блокноте
1 ответ
Я как-то решил проблему, я пишу здесь, чтобы помочь другим. Пожалуйста, дайте мне знать, если есть какая-либо ошибка в коде.
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
,
Нам нужно разобраться с делом и для возврата.