// Default filter function
        public int CoreHookProc(int code, IntPtr wParam, IntPtr lParam)
        {
            if (code < 0)
            {
                return(CallNextHookEx(m_hhook, code, wParam, lParam));
            }

            // Let clients determine what to do
            HookEventArgs e = new HookEventArgs();

            e.HookCode = code;
            e.wParam   = wParam;
            e.lParam   = lParam;
            OnHookInvoked(e);

            // Yield to the next hook in the chain
            return(CallNextHookEx(m_hhook, code, wParam, lParam));
        }
        // Windows hook event handler
        private void HookEventHandler(object sender, HookEventArgs e)
        {
            if (InRefreshingActiveWindow)
            {
                return;
            }

            Win32.CWPRETSTRUCT cwpret = (Win32.CWPRETSTRUCT)Marshal.PtrToStructure(e.lParam, typeof(Win32.CWPRETSTRUCT));
            int msg = cwpret.message;

            if (msg == (int)Win32.Msgs.WM_KILLFOCUS)
            {
                DockPane pane = GetPaneFromHandle((IntPtr)cwpret.wParam);
                if (pane == null)
                {
                    User32.PostMessage(this.Handle, WM_REFRESHACTIVEWINDOW, 0, 0);
                }
            }
            else if (msg == (int)Win32.Msgs.WM_SETFOCUS)
            {
                User32.PostMessage(this.Handle, WM_REFRESHACTIVEWINDOW, 0, 0);
            }
        }