예제 #1
0
        /// <summary>
        /// 現在のキャレット位置にコンポジションウィンドウを表示する
        /// (コンポジションウィンドウ:入力中の未確定文字列)
        /// </summary>
        /// <param name="handle"></param>
        public void SetCompositionWindow(IntPtr handle, Font font)
        {
            if (handle == null)
            {
                return;
            }

            IntPtr hImc = CEWin32Api.ImmGetContext(handle);

            CEWin32Api.POINT point = new CEWin32Api.POINT(0, 0);
            CEWin32Api.GetCaretPos(out point);
            CEWin32Api.COMPOSITIONFORM compform = new CEWin32Api.COMPOSITIONFORM();
            compform.ptCurrentPos.X = point.X;
            compform.ptCurrentPos.Y = point.Y;
            compform.dwStyle        = CEWin32Api.CFS_POINT;
            if (hImc != null)
            {
                CEWin32Api.ImmSetCompositionWindow(hImc, ref compform);
            }

            IntPtr hHGlobalLOGFONT = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(CEWin32Api.LOGFONT)));
            IntPtr pLogFont        = CEWin32Api.GlobalLock(hHGlobalLOGFONT);

            CEWin32Api.LOGFONT logFont = new CEWin32Api.LOGFONT();
            font.ToLogFont(logFont);
            logFont.lfFaceName /*Name*/ = font.Name; //追加
            Marshal.StructureToPtr(logFont, pLogFont, false);
            CEWin32Api.GlobalUnlock(hHGlobalLOGFONT);
            CEWin32Api.ImmSetCompositionFont(hImc, hHGlobalLOGFONT);
            Marshal.FreeHGlobal(hHGlobalLOGFONT);

            CEWin32Api.ImmReleaseContext(handle, hImc);
        }
예제 #2
0
        /// <summary>
        /// 現在のキャレット位置にキャンディデートウィンドウを表示する
        /// (キャンディデートウィンドウ:変換候補一覧ウィンドウ)
        /// </summary>
        /// <param name="handle"></param>
        public void SetCandidateWindow(IntPtr handle)
        {
            if (handle == null)
            {
                return;
            }

            IntPtr hImc = CEWin32Api.ImmGetContext(handle);

            CEWin32Api.POINT point = new CEWin32Api.POINT(0, 0);
            CEWin32Api.GetCaretPos(out point);
            CEWin32Api.CANDIDATEFORM cndFrm = new CEWin32Api.CANDIDATEFORM();
            cndFrm.ptCurrentPos.X = point.X;
            cndFrm.ptCurrentPos.Y = point.Y;
            cndFrm.dwStyle        = CEWin32Api.CFS_CANDIDATEPOS;
            if (hImc != null)
            {
                CEWin32Api.ImmSetCandidateWindow(hImc, ref cndFrm);
            }
            CEWin32Api.ImmReleaseContext(handle, hImc);
        }