我想在一窗体内显示文本时,当鼠标不在客户区时,滚动条能够自动滚动,而当鼠标在客户区时停止滚动,请问该怎么办呀?
我现在只能做到在客户区双击时,滚动条自动滚动,再双击停止滚动,但是滚动条的滚动不是连续性的。我的具体做法是当双击时设置一个计时器,然后在WM_TIMER消息中给窗口发个SB_LINEDOWN消息。但是效果不是太好。我该怎么办

解决方案 »

  1.   

    我提个建议哈,仅供参考:
    处理WM_MOUSEMOVE事件,在其中使用GetCursorPos、GetClientRect、PtInRect获知鼠标指针是否在客户区内,如若不在则启动计时器,否则KillTimer。
    在计时器中使用SB_LINEDOWN。
      

  2.   

    说错了,用GetWindowsRect,不是GetClientRect。
      

  3.   

    请问fenforever:能说说PtInRect的具体用法吗,谢了
      

  4.   

    BOOL PtInRect(
      CONST RECT *lprc,  // 矩形结构指针
      POINT pt           // 坐标点结构
    );
      

  5.   

    初始状态是滚动的
    然后响应MOuSEMOVE消息,这里判断鼠标坐标,用API( ::GetCursorPos(&point) )
    如果在客户区内就停止滚动,之外就滚动,客户区坐标要转换一下要滚动有连续的效果
    用CScrollView
    然后用这个函数控制滚动就行了吧
    void ScrollToPosition(
       POINT pt 
    );