Exemplo n.º 1
0
        public static void SetImeStatus(ImeMode imeMode, IntPtr handle)
        {
            if (imeMode == ImeMode.Inherit)
            {
                return;
            }
            if (imeMode == ImeMode.NoControl)
            {
                return;
            }
            ImeMode[] inputLanguageTable = ImeModeConversion.InputLanguageTable;
            if (inputLanguageTable == ImeModeConversion.UnsupportedTable)
            {
                return;
            }
            int num      = 0;
            int sentence = 0;

            if (imeMode == ImeMode.Disable)
            {
                Disable(handle);
            }
            else
            {
                Enable(handle);
            }
            switch (imeMode)
            {
            case ImeMode.NoControl:
            case ImeMode.Disable:
                return;

            case ImeMode.On:
                imeMode = ImeMode.Hiragana;
                goto Label_0079;

            case ImeMode.Off:
                if (inputLanguageTable == ImeModeConversion.JapaneseTable)
                {
                    break;
                }
                imeMode = ImeMode.Alpha;
                goto Label_0079;

            case ImeMode.Close:
                break;

            default:
                goto Label_0079;
            }
            if (inputLanguageTable == ImeModeConversion.KoreanTable)
            {
                imeMode = ImeMode.Alpha;
            }
            else
            {
                SetOpenStatus(false, handle);
                return;
            }
Label_0079:
            if (ImeModeConversion.ImeModeConversionBits.ContainsKey(imeMode))
            {
                ImeModeConversion conversion = ImeModeConversion.ImeModeConversionBits[imeMode];
                IntPtr            ptr        = UnsafeNativeMethods.ImmGetContext(new HandleRef(null, handle));
                UnsafeNativeMethods.ImmGetConversionStatus(new HandleRef(null, ptr), ref num, ref sentence);
                num |= conversion.setBits;
                num &= ~conversion.clearBits;
                UnsafeNativeMethods.ImmSetConversionStatus(new HandleRef(null, ptr), num, sentence);
                UnsafeNativeMethods.ImmReleaseContext(new HandleRef(null, handle), new HandleRef(null, ptr));
            }
        }