在 OnDraw函数中    CClientDC  dc(this); pDC=&dc;
     
CPoint point(0,0);
pDC->LPtoDP(&point);
     y.Format("%d",point.y ); 
AfxMessageBox(y);     在滚动条拉动以后,输出的y仍然是0,为什么呢

解决方案 »

  1.   

    CPoint point(0,0);
    pDC->LPtoDP(&point); 
    在MM_TEXT模式下,输出的永远一样,这与你拉动滚动条无关。
    与之相关的是这个点可见转为不可见,或反之。
      

  2.   

    或者是叫PrepareDC之类的函数,不太记得了。
      

  3.   

    DP的原点永远是客户区(?)的屏幕坐标原点,
    LP的原点是当前视图文件的原点。
    对CPoint point(0, 0);定义的是在LP下的点,
    而所有的绘图函数均是在DP中完成的,因为你只能在当前的屏幕上绘图。
    所以DP的原点可以是LP中的任意点,视滚动条的位置和映射模式而定。
    比如对一副2000*2000大小的图片,当你滚动到文件结尾时(滚动条拉到底),
    DP的原点是客户区的屏幕坐标原点如(200, 200),
    而这幅图显示在当前屏幕中的部分在LP下的坐标可能是(1500, 1500);
    为了在当前屏幕显示,你需要LPToDP(&point),可能将需显示部分转化到(200, 200)到
    (700, 700)这个客户区域,从而绘制出来。