自己做了个测试程序
  pDc->SetMapMode(MM_LOENGLISH) ;
  CPoint Pt1(10,10);
  CPoint Pt2(10,10);
  pDc->LPtoDP(&Pt1);
  pDc->DPtoLP(&Pt2);
  
  结果是Pt1={8,-7};Pt2={13,-13}  为什么?
  到底SetMapMode的那几个映射方式怎么理解,windows程序设计(中文chm)也说的不是很清楚。
  
  分不够可以单独给,来者有分。

解决方案 »

  1.   

    谁说windows程序设计说得不清楚啊?说得很清楚了。你上面的例子不好说,因为LPtoDP或是DPtoLP的结果除了受SetMapMode影响之外,还要受SetWindowExtEx,SetViewportExtEx,SetViewportOrgEx之类的API的影响。
      

  2.   

    感谢 wltg2001(红猪) 的关注
    LPtoDP 或者 DPtoLP 后为什么Y为负我能理解,是因为坐标方式不一样但我不是很理解的是,根据公式
    xViewport=(xWindow-xWinOrg)*(xViewExt/xWinExt)+xViewOrg
    带入值的话是
    xViewport=(10-0)*(0.01)+0;
    xViewport=(10-0)*(96/100)+0;
    上面两个公司我一直怀疑是我错了,因为窗口和视端口的原点我都没改变因此应该都是零的。
    但我在那么算都算不出来13,或者8出来,请指教。
      

  3.   

    我试了一下结果是Pt1={8,-8};Pt2={13,-13}
      

  4.   

    Windows映射模式及相关问题的解决
    http://www.vckbase.com/document/viewdoc/?id=927
      

  5.   

    我的的确是Pt1={8,-7};Pt2={13,-13}很奇怪啊。
      

  6.   

    关注中,我这试验的结果是Pt1={9,-9};Pt2={12,-12},
    这个应该设备的屏幕分辨率也有关系,我先前只是做过逻辑单位下的坐标点和实际坐标下的坐标点之间的转化.
      

  7.   

    我总算算出来为什么是Pt1={8,-7};Pt2={13,-13}公式的确是没错的,我反而感觉是因为看了MM_ANISOTROPIC才明白过来该怎么算的但是我还是不明白一个事情,下面3个表怎么理解?怎么转换?映像方式          逻辑单位      英寸        毫米
    MM_LOENGLISH    0.01 in.    0.01      0.254
    MM_LOMETRIC     0.1 mm.     0.00394   0.1
    MM_HIENGLISH    0.001 in.   0.001     0.0254
    MM_TWIPS        1/1400 in.  0.000694  0.0176
    MM_HIMETRIC     0.01 mm.    0.000394  0.01
    映像方式        视埠范围(x,y)    窗口范围(x,y)
    MM_LOMETRIC   (96, 96)        (254, -254)
    MM_HIMETRIC   (96, 96)        (2540, -2540)
    MM_LOENGLISH  (96, 96)        (100, -100) 
    MM_HIENGLISH  (96, 96)        (1000, -1000)
    MM_TWIPS      (96, 96)        (1440, -1440)
     映像方式        视埠范围(x,y)   窗口范围(x,y)
    MM_LOMETRIC   (1024, -768)   (3,200, 2,400) 
    MM_HIMETRIC   (1024, -768)   (32,000, 24,000) 
    MM_LOENGLISH  (1024, -768)   (1,260, 945)
    MM_HIENGLISH  (1024, -768)   (12,598, 9,449)
    MM_TWIPS      (1024, -768)   (18,142, 13,606)