急!!!!各位大牛,非常急切的想得到大家的帮助:添加一个滑块上去,水平滑块,当选中滑块以后,滑动鼠标滚轮,鼠标滚轮往下滚,滑块往右滑动,也就是说用GetPos函数获取的数据会增大,但是鼠标滚轮往下滚的时候,一般是减小啊!!!那么应该如何做,才能实现,鼠标滚轮往下滚的时候,滑块往左滑动啊????

解决方案 »

  1.   

    为什么滚动鼠标滚轮会使得滑块也滑动,而当选中滑块以后,滚动鼠标滚轮,并没用响应OnMouseWheel函数,这里面的机制是怎么样的???哪位大牛帮帮忙啊!!!!
      

  2.   

    MSDN上说可以通过鼠标软件来修改滚轮效果,但是修改了可能就所有的都变了。你这个问题估计只有重新绘制slider了
      

  3.   


    这个可以啊,重载slider的鼠标滚轮事件,直接返回就是了
      

  4.   

        不行啊!!!能不能把代码稍微呈现一下,OnMouseWheel函数返回的是BOOL型的哈,那我把return    CSliderCtrl::OnMouseWheel(nFlags, zDelta, pt)这句给注释掉,然后返回0或者1,鼠标滚轮滚动的时候滑块还是跟着动啊!!!
      

  5.   

         调试发现,当选定滑块以后,滑动鼠标滚轮,压根就不进入OnMouseWheel函数中去?????根本就没调用这个函数!!!!实在搞不懂了!!!!!
      

  6.   

    简单:
    LRESULT CYourSlider::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(message==WM_MOUSEWHEEL) return 0; return CSliderCtrl::DefWindowProc(message, wParam, lParam);
    }
      

  7.   

        首先说句谢谢!!!!!!!!!!!!!
        拖一个滑块控件到对话框上,然后生成一个类,让这个类从CSliderCrl类继承下来,然后重载DefWindowPoc
    函数,添加if(message==WM_MOUSEWHEEL) return 0;这行代码,是这样撒??但是还是不行,加好以后,当选中滑块,滚动鼠标滑轮,滑块还是跟着在动啊??
      

  8.   

    在PretranslateMessage函数中截获。绝对可以,我屏蔽过
      

  9.   

    放PreTranslate 中是这样:
    if(pMsg->message==WM_MOUSEWHEEL) return TRUE;
    这2中方法要看 slider 个数 , 个数 多 派生类 方便。至于在dlg 响应 不行,是因为 slider是 子窗口, 这时鼠标 消息 进入 slider 了 (鼠标被slider 捕获 了)
      

  10.   

      类没改???什么意思???我拖一个滑块控件到对话框上,然后利用想到生成一个类,从CSliderCtrl中继承下来,然后在新类中重载DefWindowPoc函数,加入你说的那行代码,是这样的不???
      

  11.   

          我就用一个滑块!!!在PretranslateMessage函数中我是写成if(pMsg->message==WM_MOUSEWHEEL) return TRUE;这样的啊!!但是不行额。嗨。。纠结啊!!
      

  12.   

    原来:
    CSliderCtrl m_Slider;改后:
    CYourSliderCtrl m_Slider;不过一个slider 在 PretranslateMessage 应该是可以的。
    多个话 要检查 hWnd 是不是 正确
      

  13.   

    另外,这只是习惯问题。现代人的阅读习惯是从左到右、从上到下,所以“左”和“上”表示回到原点,表示减小,“右”和“下”表示增大。你想想屏幕或窗口坐标系的设定不也是如此么。如果使用方向键操作滑块,不也是这样对应的么。还有spin控件的使用习惯也是这样的。