在一个带有垂直(水平)滚动条的视图窗口中,鼠标点击窗口的客户区左上角后,通过 LButtonDown()能获得 point.x = 0, point.y = 0; (这是正确的)滚动窗口的垂直(水平)滚动条后,鼠标再次点击窗口的客户区左上角点击后,通过 LButtonDown()能获得的 仍然 是 point.x = 0, point.y = 0; (这不是我想要的)这时我想获得的point.x 与 point.y 应该是加上垂直(水平)滚动的距离,请问应该怎样把获得的point.x = 0, point.y = 0 转换 成整个窗口客户区的绝对 X,Y 或 怎样获取 垂直(水平)滚动的距离呢谢谢

解决方案 »

  1.   

    使用与滚动条操作相关的函数,GetScrollBarInfo,GetScrollPos等等,具体参看MSDN
      

  2.   

    请问如何获取滚动条滚动距离
    我添加了消息响应
    void CXXXView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
    {
    // TODO:
    pScrollBar->GetScrollPos(); //程序在这里异常了
    CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
    }
    当点击滚动条时,程序运行到pScrollBar->GetScrollPos()就跑飞了,
    应该怎样获得滚动条滚动距离呢
      

  3.   

    要用到转换语句clientToScreen语句转换吧
      

  4.   

    你现在获得的坐标point.x = 0, point.y = 0是桌面坐标,应该转换成窗口坐标。用               clientToScreen(&point)转换
      

  5.   

    CDC* pDC=m_pScrollView->GetDC();
    CPoint pt=-m_pScrollView->GetDeviceScrollPosition();
    pDC->SetViewportOrg(pt);
    pDC->LPtoDP(鼠标点击获取的点);
      

  6.   

    已经找到方法解决,给大家参考
    CClientDC dc(this);
    OnPrepareDC(&dc);
    dc.DPtoLP(&point);
      

  7.   

    OnPrepareDC(&dc);
    在其基类中实际上就是调用了
    CPoint pt=-m_pScrollView->GetDeviceScrollPosition();
    pDC->SetViewportOrg(pt);
      

  8.   

    rect1[i].PtInRect(point+GetDeviceScrollPosition()得到相应位置