窗体form上有很多label、buttun之类的控件,我希望代码能接收、响应鼠标的滚轮事件,只要鼠标在form显示的区域内,而无论焦点在哪个控件上。因为控件太多,我不想每个控件都去注册一遍滚轮事件。如果不用钩子,怎么做呢?谢谢!

解决方案 »

  1.   

    捕获消息WM_MOUSEWHEEL 
    http://msdn.microsoft.com/en-us/library/ms645617(v=VS.85).aspx
      

  2.   

            /// <summary>
            /// 窗口消息处理
            /// </summary>
            /// <param name="m"></param>
            protected override void DefWndProc(ref Message m)
            {
                try
                {
                    switch (m.Msg)
                    {
                        case 0x020A: //处理消息WM_MOUSEWHEEL
                             //加上你处理的代码
                            break;
                        default:
                            base.DefWndProc(ref m);//调用基类函数处理非自定义消息。
                            break;
                    }
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message + "DefWndProc");
                }
                
            }
      

  3.   

    谢谢!
    switch (m.Msg)
      {
      case 0x020A:
    这样只是知道了有滚轮事件,但是相关参数(如方向,滚动的数值)怎么获得?