如何在CScrollView的子类中用鼠标拖动线条
if(point.y <= m_nDown+10 && point.y >=m_nDown-10  )//拖动下线
{   
    ::SetCursor(::LoadCursor(NULL,IDC_SIZENS));
if(m_bLButtonDown == true)
{   
           InvalidateRect(CRect(0,m_nDown-1,822,m_nDown+1));
           m_nDown = point.y;
   CClientDC dc(this);     
   CPen *pOldPen,pNewPen;
           pNewPen.CreatePen(PS_DASHDOT,1,RGB(220,220,220));
            pOldPen=dc.SelectObject(&pNewPen);
    dc.MoveTo(0,m_nUp);
                    dc.LineTo(820,m_nUp);

   
   
}
}
边拖动时边显示线条,而且设备坐标与逻辑坐标要很好的转换,我拖动时没动滚动条时拖动很正常,动了滚条就不行了.

解决方案 »

  1.   

    CScrollView下要考虑到滚动条滚动以后 视图左上角已经不再是(0,0)起点了,应该根据滚动条的位置得到新的起点。
      

  2.   

    我用dc.LPTOP()转换坐标后再画还是存在同样的问题,难道要用CScrollView类中的函数来获取scrollbox的位置,然后再做转换.
      

  3.   

    滚动条滚动后不是(0,0)点了,你可以这样(假设只有纵向的情况)
    MM_TEXT模式下有效。SCROLLINFO si;
    GetScrollInfo(BS_VERT,&si);
    pos =  si.nPos;  //这个是你目前滚动过y轴的像素数。那么这个时候你屏幕上视图区左上角的坐标就是(0,pos)