Beispiel #1
0
        /// <summary>
        /// http://social.msdn.microsoft.com/Forums/silverlight/en-US/0ae40192-e866-480a-9f90-2a8d2a75b045/getting-proplem-with-focus-of-customcontrol
        /// </summary>
        /// <returns></returns>
        public bool Focus(int nField = 0)
        {
            Message   m;
            IPv4Field f = this.Field(nField);

            m = Message.Create(Handle, (int)NativeMethods.WM.WM_SETREDRAW, IntPtr.Zero, IntPtr.Zero);
            WndProc(ref m);
            if ((nField == 0) || (f.IsEnabled == false))
            {
                NativeMethods.SetFocus(Handle);
            }
            else
            {
                iWM_MOUSEACTIVATE = 2;

                NativeMethods.SetFocus(Handle);

                iWM_MOUSEACTIVATE = 1;

                m = Message.Create(Handle, (int)NativeMethods.IPAMess.IPM_SETFOCUS, (IntPtr)nField, IntPtr.Zero);
                WndProc(ref m);

                iWM_MOUSEACTIVATE = 0;
            }
            m = Message.Create(Handle, (int)NativeMethods.WM.WM_SETREDRAW, (IntPtr)1, IntPtr.Zero);
            WndProc(ref m);
            return(NativeMethods.RedrawWindow(new HandleRef(this, Handle), IntPtr.Zero, IntPtr.Zero, NativeMethods.RedrawWindowFlags.RDW_ALLCHILDREN | NativeMethods.RedrawWindowFlags.RDW_INVALIDATE | NativeMethods.RedrawWindowFlags.RDW_ERASENOW));
        }
Beispiel #2
0
        /// <summary>
        /// Handles MouseActivate message from the contol
        /// </summary>
        /// <param name="m">message to process</param>
        /// <returns>true if process message, false otherwise</returns>
        private bool ProcessControlMouseActivate(ref Message m)
        {
            Debug.WriteLine("WM_MOUSEACTIVATE");
            int currentFocus = NativeMethods.GetFocus();

            for (int i = 0; i < 4; i++)
            {
                if (currentFocus == (int)_hfv.hWnd[i])
                {
                    m.Result = (IntPtr)NativeMethods.MouseActivate.MA_NOACTIVATE;
                    return(true);
                }
            }

            NativeMethods.RECT lpRect = new NativeMethods.RECT();
            NativeMethods.GetWindowRect(new HandleRef(this, Handle), out lpRect);
            Size sz = new Size((lpRect.Right - lpRect.Left) / 4, lpRect.Bottom - lpRect.Top);

            Rectangle[] SplitRects         = new Rectangle[4];
            Point       p                  = Cursor.Position;
            int         nFieldIPM_SETFOCUS = 0;

            for (int i = 0; i < 4; i++)
            {
                SplitRects[i] = new Rectangle(new Point(lpRect.Left + (sz.Width * i), lpRect.Top), sz);
                if (SplitRects[i].Contains(p))
                {
                    IPv4Field f = this.Field(i);
                    if (!f.IsEnabled)
                    {
                        m.Result = (IntPtr)NativeMethods.MouseActivate.MA_NOACTIVATEANDEAT;
                        return(true);
                    }
                    nFieldIPM_SETFOCUS = i;
                }
            }
            Debug.WriteLine("BeforeIPM_SETFOCUS");
            Focus(nFieldIPM_SETFOCUS);
            Debug.WriteLine("AfterIPM_SETFOCUS");
            return(false);
        }