Esempio n. 1
0
 public WindowMessageEventArgs(IntPtr _hWnd, WindowMessageEnum _uMsg, IntPtr _wParam, IntPtr _lParam) : base(null)
 {
     hWnd   = _hWnd;
     uMsg   = _uMsg;
     wParam = _wParam;
     lParam = _lParam;
 }
Esempio n. 2
0
 public WindowMessageEventArgs(Win32NativeWindow window, WindowMessageEnum _uMsg, IntPtr _wParam, IntPtr _lParam) : base(window)
 {
     hWnd   = (window == null) ? IntPtr.Zero : window.Handle;
     uMsg   = _uMsg;
     wParam = _wParam;
     lParam = _lParam;
 }
        /// <summary>
        /// Override this method if you need to process messages before they get processed by the default handler. Useful to handle input and MCI notifications.
        /// </summary>
        /// <param name="uMsg"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        protected virtual IntPtr WndProc(WindowMessageEnum uMsg, IntPtr wParam, IntPtr lParam)
        {
            bool bDispose = false;

            // GameDebugger.Log("WndProc Message={0}=0x{1:x} wParam=0x{2:x} lParam=0x{3:x}", uMsg.ToString(), (int)uMsg, (int)wParam, (int)lParam);
            // GameDebugger.Add(String.Format("WndProc Message={0}=0x{1:x} wParam=0x{2:x} lParam=0x{3:x}", uMsg.ToString(), uMsg, (int)wParam, (int)lParam));
            switch (uMsg)
            {
            case WindowMessageEnum.CLOSE: {
                if (!CanClose())
                {
                    return((IntPtr)1);
                }
                OnClose();
                bDispose = true;
                break;
            }

            case WindowMessageEnum.SIZE: {
                Size2 size = new Size2((int)lParam & 0xFFFF, (int)((int)lParam >> 16) & 0xFFFF);
                OnResize(ref size);
                break;
            }

            case WindowMessageEnum.MOVE: {
                Point2 point;
                unchecked {
                    point = new Point2((int)(short)((uint)lParam & 0xFFFF), (int)(short)((int)lParam >> 16) & 0xFFFF);
                }
                OnMove(ref point);
                break;
            }

            case WindowMessageEnum.ENTERSIZEMOVE: {
                OnEnterSizeMove();
                break;
            }

            case WindowMessageEnum.EXITSIZEMOVE: {
                OnExitSizeMove();
                break;
            }
            }

            IntPtr ret = DefWindowProc(uMsg, wParam, lParam);

            if (bDispose)
            {
                Dispose();
            }
            return(ret);
        }
 /// <summary>
 /// Override this method if you need to process messages that were not processed by the WndProc() method.
 /// </summary>
 /// <param name="uMsg"></param>
 /// <param name="wParam"></param>
 /// <param name="lParam"></param>
 /// <returns></returns>
 protected virtual IntPtr DefWindowProc(WindowMessageEnum uMsg, IntPtr wParam, IntPtr lParam)
 {
     if (PostprocessWindowMessageEvent != null)
     {
         WindowMessageEventArgs args = new WindowMessageEventArgs(this, uMsg, wParam, lParam);
         PostprocessWindowMessageEvent.Invoke(args);
         if (args.PreventsDefault)
         {
             return(args.ReturnValue);
         }
     }
     return(API.Externals.DefWindowProc(m_hWnd, uMsg, wParam, lParam));
 }
 internal IntPtr WndProcInternal(WindowMessageEnum uMsg, IntPtr wParam, IntPtr lParam)
 {
     if (PreprocessWindowMessageEvent != null)
     {
         WindowMessageEventArgs args = new WindowMessageEventArgs(this, uMsg, wParam, lParam);
         PreprocessWindowMessageEvent.Invoke(args);
         if (args.PreventsDefault)
         {
             return(args.ReturnValue);
         }
     }
     return(WndProc(uMsg, wParam, lParam));
 }
Esempio n. 6
0
        // TODO: Add DISPLAYCHANGE method capture

        protected override IntPtr WndProc(WindowMessageEnum uMsg, IntPtr wParam, IntPtr lParam)
        {
            switch (uMsg)
            {
            case WindowMessageEnum.SYSCOMMAND: {
                if ((int)wParam == 0xF140 ||                      // SC_SCREENSAVE
                    (int)wParam == 0xF170)                                 // SC_MONITORPOWER
                {
                    return(IntPtr.Zero);
                }
                break;
            }
            }
            return(base.WndProc(uMsg, wParam, lParam));
        }
Esempio n. 7
0
        public static IntPtr WndProc(IntPtr hWnd, WindowMessageEnum uMsg, IntPtr wParam, IntPtr lParam)
        {
            Win32NativeWindow window;

            switch (uMsg)
            {
            case WindowMessageEnum.ACTIVATEAPP: {
                Instance.OnActivate(!((int)wParam == 0));
                break;
            }
            }

            if (Instance.Windows.TryGetValue((int)hWnd, out window))
            {
                if (ProcessWindowMessageEvent != null)
                {
                    WindowMessageEventArgs args = new WindowMessageEventArgs(window, uMsg, wParam, lParam);
                    ProcessWindowMessageEvent(args);
                    if (args.PreventsDefault)
                    {
                        return(args.ReturnValue);
                    }
                }
                return(window.WndProcInternal(uMsg, wParam, lParam));
            }

            if (ProcessWindowMessageEvent != null)
            {
                WindowMessageEventArgs args = new WindowMessageEventArgs(hWnd, uMsg, wParam, lParam);
                ProcessWindowMessageEvent(args);
                if (args.PreventsDefault)
                {
                    return(args.ReturnValue);
                }
            }
            return(API.Externals.DefWindowProc(hWnd, uMsg, wParam, lParam));
        }
Esempio n. 8
0
 public static extern Boolean PostMessage(IntPtr hWnd, WindowMessageEnum Msg, IntPtr wParam, IntPtr lParam);
Esempio n. 9
0
 public extern static IntPtr DefWindowProc(IntPtr hWnd, WindowMessageEnum uMsg, IntPtr wParam, IntPtr lParam);