to yoci(阿呸)
是阿,关键是他还专门给出了一幅图来说明,这就更让人困惑了。

解决方案 »

  1.   

    但是程序运行的结果的确是:
    This means that the logical point (-cxClient/2, -cyClient/2) is mapped to the device point (cxClient/2, cyClient/2)。
    事实已经清楚了,但是原因尚且不明......
      

  2.   

    对于同时使用SetViewportOrgEx和SetWindowOrgEx的情况,我还比较头昏,搞不清楚,但可以确定的是,对于同时使用,不能再用单独的定义来简单连接,譬如当先使用SetViewportOrgEx,hdc里做一次记录,然后再使用SetWindowOrgEx的时候,hdc里面肯定有相应的变换,猜测hdc里的数据结构:POINT logicOrigin; // device coordinate of logic origin
    一开始, logicOrigin.x = logicOrigin.y = 0
    在SetViewportOrgEx里:
    logicOrigin.x += x;
    logicOrigin.y += y;
    在SetWindowOrgEx
    logicOrigin.x -= x;
    logicOrigin.y -= y;这样,如果你是单独使用,那么,总是和MSDN的说法一致的
    如果你结合使用,那么,petzold这段话也对了另外想跟你说,不要随便切换帖子,讨论不连贯
      

  3.   

    to ed9er(始祖鸟)
    我是觉得那个贴子点击太低了,可能是太长,怕没人愿意看
      

  4.   

       你怎么还理不通,原点 (0,0)是永远不变的,而另外两个winOrg,ViewportOrg是相对
    原点来说的,你看下面:
            setViewportOrg(8,8)
             setWindowOrg(6,6)
        MM_TEXT方式下
    dc.moveto(point(0,0));dc.lineto(point(8,8))
    你说这效果是如何。
         这条线是从(2,2)到(10,10)你去眼阵一下,结果是这样吗?
    你读的是英文板吗?怎么帖出来的很多英语
             
      

  5.   

    to chendd2001(饿狼传说)
    结论我验证过了,是清楚的,我不明白的是原因,根据petzold前面讲的和msdn的说法都无法解释。
    我看的是英文版。
    既然原点不变,那么setWindowOrg的作用就是把某逻辑点映射到设备点(0,0),怎么会不是呢?
    当然我想了一个解释:
    就是这里的逻辑点是初始的逻辑点,就是逻辑点(0,0)改变前的。
    那么你举的例子窗口原点就是设备点(2,2)了。