输入法弹窗位置

Posted 死鱼眼の猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入法弹窗位置相关的知识,希望对你有一定的参考价值。

        [DllImport"imm32.dll")]
        public static extern bool ImmGetOpenStatus (IntPtr hIMC);
        [ DllImport("imm32.dll" )]
        public static extern IntPtr ImmGetContext (IntPtr hWnd);
        [ DllImport("imm32.dll" )]
        public static extern int ImmReleaseContext (IntPtr hWndIntPtr hIMC);
        [ DllImport("imm32.dll" )]
        public static extern bool ImmSetCompositionWindow (IntPtr hIMCref   COMPOSITIONFORM lpCompForm);
 
        [ StructLayout(LayoutKind .Sequential)]
        public struct RECT
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;
        }
        [ StructLayout(LayoutKind .Sequential)]
        public struct POINTAPI
        {
            public int X;
            public int Y;
        }
        [ StructLayout(LayoutKind .Sequential)]
        public struct COMPOSITIONFORM
        {
            public uint dwStyle;
            public POINTAPI ptCurrentPos;
            public RECT rcArea;
        }
 
        const int EM_GETSEL = 0xB0;
        const int EM_LINEFROMCHAR = 0xC9;
        const int EM_LINEINDEX = 0xBB;
        [ DllImport("user32.dll" EntryPoint "SendMessage")]
        public static extern int SendMessage (
            int hwnd ,
            int wMsg ,
            int wParam ,
            ref int lParam
        );
        private Point GetCursorPosint TextHwnd )
        {
            int = 0, = 0, = 0;
            int lParam = 0, wParam = 0;
            SendMessage (TextHwndEM_GETSELwParam ref lParam);
            / 65536;
            int lineNo SendMessageTextHwndEM_LINEFROMCHAR jref lParam ) + 1;
            SendMessage (TextHwndEM_LINEINDEX, -1, ref lParam);
            int colNo + 1;
            Point ret new Point(lineNo colNo);
            return ret ;
        }  
 
 
        void textBox_KeyDown(object senderKeyEventArgs )
        {
            IntPtr it = ((SystemWindows.Interop .HwndSourcePresentationSource.FromVisual (rBox)). Handle;
            IntPtr hImc ImmGetContextit);
            if (ImmGetOpenStatus (hImc))
            {
                COMPOSITIONFORM cf new COMPOSITIONFORM();
                cf.dwStyle = 2;
 
                //Point p = GetCursorPos(it.ToInt32());
                //Point p1 = this.PointToScreen(p);
                Point p2 thisTranslatePoint(new Point(0, 0), CVisualTreeHelper.GetParent <Window>( this));
                cf.ptCurrentPos .= ( int)p2 .X;
                cf.ptCurrentPos .= ( int)p2 .+ 300;
                bool setcom ImmSetCompositionWindowhImcref cf);
            }
            ImmReleaseContext(hImc it);
        }
 
 
 
资料
 
msdn: https://msdn.microsoft.com/en-us/library/dd318653(v=vs.85).aspx
 
http://msdn.microsoft.com/en-us/library/dd317764(v=VS.85).aspx

CFS_DEFAULT Move the composition window to the default position. The IME window can display the composition window outside the client area, such as in a floating window. 
CFS_FORCE_POSITION Display the upper left corner of the composition window at exactly the position specified by ptCurrentPos. The coordinates are relative to the upper left corner of the window containing the composition window and are not subject to adjustment by the IME. 
CFS_POINT Display the upper left corner of the composition window at the position specified by ptCurrentPos. The coordinates are relative to the upper left corner of the window containing the composition window and are subject to adjustment by the IME. 
CFS_RECT Display the composition window at the position specified by rcArea. The coordinates are relative to the upper left of the window containing the composition window. 

http://dev.firnow.com/course/4_webprogram/asp.net/netjs/2008215/99962_35.html

Public Const CFS_DEFAULT = &H0
Public Const CFS_RECT = &H1
Public Const CFS_POINT = &H2
Public Const CFS_SCREEN = &H4
Public Const CFS_FORCE_POSITION = &H20
Public Const CFS_CANDIDATEPOS = &H40
Public Const CFS_EXCLUDE = &H80

以上是关于输入法弹窗位置的主要内容,如果未能解决你的问题,请参考以下文章

vue elementUI点击输入框弹出弹窗不允许输入框输入

去除搜狗输入法弹窗骚扰的一个简易方法

js弹窗

JavaScript 编写代码对用户输入内容的输入框进行排查,看有没有敏感字“草”字

js弹窗输入

微信小程序弹窗下输入框点击还会获取焦点