Ответ 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
.
Нам также нужно обрабатывать регистр для backspace.