对Windows中定义视口和窗口不是很明白,为什么要定义两个?
对设置视口原点,窗口原点,视口范围,窗口范围不懂文字显示是在视口还是窗口?
比如说SetViewOrgEx(hdc,cxClient/2,cyClient/2,NULL);
      SetWindowOrgEx(hdc,-cxClient/2,-cyClient/2,NULL);
书上说这两个语句意味着逻辑点(-cxClient/2,-cyClient/2)将映射为设备点(cxClient/2,cyClient/2)不懂它是怎么映射过来的,请高手解答下。。

解决方案 »

  1.   

    窗口和视口这两个概念,要和以前建立起来的窗口的概念区别开来,这里的窗口(Window)是基于“逻辑坐标”的,它的单位可以是象素、mm、英寸、磅、或者其他你自己定义的单位。特别的是,所有的GDI绘图函数使用的都是逻辑坐标,这点很重要。比如以下代码:
        Rectangle ( hdc , 0, 0 , 400, 300 );
    在以逻辑单位为0.01mm时,绘制的就是一个 4mm × 3mm的矩形,而在以0.01英寸为单位时,绘制的就是:4英寸×3英寸的矩形。
       
       视口(Viewport)则是基于设备坐标(象素)的。而通常,视口和窗口的客户区是相同的,而且在视口坐标系中,客户区的左上角的坐标是(0,0),且X轴向右增加,Y轴向下增加。
      

  2.   

    SetViewOrgEx(hdc,cxClient/2,cyClient/2,NULL);
    SetWindowOrgEx(hdc,-cxClient/2,-cyClient/2,NULL);这两个函数则是确定“窗口”到“视口”映射关系的函数,一般来说,不同时使用,只使用一个即可。第一个函数,则是指定了“窗口”中的原点映射到视口的(cxClient/2,cyClient/2)!
    第二个函数则是指定“窗口”中的点(-cxClient/2,-cyClient/2)映射到视口的原点!
      

  3.   

    SetViewOrgEx(hdc,cxClient/2,cyClient/2,NULL);
    SetWindowOrgEx(hdc,-cxClient/2,-cyClient/2,NULL);
    这两个语句一起使用意味着逻辑点(-cxClient/2,-cyClient/2)将映射为设备点(cxClient/2,cyClient/2),它是怎么映射过来的,依据
    第一个函数,则是指定了“窗口”中的原点映射到视口的(cxClient/2,cyClient/2)!
    第二个函数则是指定“窗口”中的点(-cxClient/2,-cyClient/2)映射到视口的原点!这个函数的意义是怎么映射过来的
      

  4.   

    X比例因子=X视口/X窗口;
    Y比例因子=Y视口/Y窗口;
    设备X=逻辑X*X比例因子+X坐标原点偏移量;
    设备Y=逻辑Y*Y比例因子+Y坐标原点偏移量;