遇到个极其不理解的问题: CClientDC dc(this);
OnPrepareDC(&dc);断点跟踪过程中
发现同一个矩形参数(top=-3200 bottom=-4300 left=-3200 right=-2800)
经OffsetRect(50000, -50000)后
都变成了(top=-53200 bottom=-54300 left=46800 right=47200)但是
经dc.LPtoDP转换后就有了不同的结果
第一次为(top=422 bottom=458 left=250 right=262)
第二次为(top=2022 bottom=2058 left=1850 right=1862)
正好都差了1600这是怎么回事呢
请大侠指教
急用
谢谢

解决方案 »

  1.   

    可能情况有:
    一:LPtoDP前没有初始化矩形;
    二:是不是连续两次调用了LPtoDP,当然结果会不同。
      

  2.   

    是这样的
    这个工程主要是为判断鼠标激活响应的
    要激活的是矩形框的边(看成粗边,狭窄的矩形区域)
    而相邻两个矩形的边是重合的
    (第一个矩形框的右侧边与第二个矩形框的左侧边是重合的)
    因此这两条边具有同一个矩形参数(top=-3200 bottom=-4300 left=-3200 right=-2800)
    矩形序列采取CArray结构,因此需要在循环中完成循环开始前
    CClientDC dc(this);
    OnPrepareDC(&dc);第一次循环,鼠标在第一个矩形框的右侧边范围内时,
    经OffsetRect(50000, -50000)后
    变成了(top=-53200 bottom=-54300 left=46800 right=47200)
    经dc.LPtoDP转换后为(top=422 bottom=458 left=250 right=262)
    鼠标所在点在这个矩形区域内第二次循环,鼠标在第二个矩形框的左侧边范围内时,
    经OffsetRect(50000, -50000)后
    变成了(top=-53200 bottom=-54300 left=46800 right=47200)
    但是经dc.LPtoDP转换后却为(top=2022 bottom=2058 left=1850 right=1862)
    4个参数正好都差了1600
    鼠标所在点不在这个矩形区域内很差异啊
    到底是什么原因呢?
      

  3.   

    你在OnPrepareDC中设置了映射模式SetMapMode()和SetViewport...、SetWindow...,是不是没有恢复?