我想要知道鼠标滚轮时,区分是否在CScrollView的客户区,还是在它的滚动条上。

解决方案 »

  1.   

    GetFocus取得当前焦点的窗口,然后和客户区、滚动条的窗口做比较就知道了
      

  2.   

    GetClientRect 获得客户区的RECT,然后得到鼠标的坐标,用 GetCursorPos ,接着用ScreenToClient 把鼠标的屏幕坐标转换成客户坐标和先前的RECT一对比,就能知道鼠标是不是在客户区
    这样能得到客户区的右边那根线,对吧?接着你获取窗体的大小,GetWindowRect,也能获得一个RECT,当然也有右边的那根线2线之间,就是滚动条了
      

  3.   

    up
    1.获取窗口客户区的CRect,rc,使用函数GetClientRect,并使用
    2.使用GetCursorPos获取鼠标位置,使用ScreenToClient转换成客户窗口坐标
    3.使用CRect::PtInRect判断鼠标是否在该矩形范围之内。
      

  4.   

    还有种方法CScrollBar*  CView::GetScrollBarCtrl(int  nBar)   const   
    {   
      ASSERT(nBar   ==   SB_HORZ   ||   nBar   ==   SB_VERT);   
      if   (GetStyle()   &   ((nBar   ==   SB_HORZ)   ?   WS_HSCROLL   :   WS_VSCROLL))   
      {   
      //it   has   a   regular   windows   style   scrollbar   (no   control)   
      return   NULL;   
      }   
      ...   
      }将他进行重载,这样你就能获得滚动条的指针了,有了指针就能有句柄。
      

  5.   

    谢谢Tr0j4n。
    我正在用坐标区域在测试。
    重载GetScrollBarCtrl()要怎么写啊,能否贴出来看看。
      

  6.   

    根据坐标判断的办法已经测试通过了。GetScrollBarCtrl()的例子能否给一个啊,明天结贴。