本帖最后由 fengchen2195 于 2012-04-09 02:58:01 编辑

解决方案 »

  1.   

    http://topic.csdn.net/u/20110106/17/aed68793-a901-44ae-af4e-cc7716c77068.html
      

  2.   

    先不说windows
    就说坐标映射
    其实最基本就是两个问题
    1、原点在哪
    2、逻辑单位设定
    以800,600的屏幕为例
    默认原点在左上角
    逻辑单位是像素
    如果你要把图形画在屏幕中间
    图形的中心坐标就是400,300
    如果改变这种映射模式
    我们把原点设置在400,300的位置
    那么你要把图形输出在中心
    你得绘制坐标就是0,0
    基本上就是这个意思
    理论的东西相信你已经很了解了
    我就不班门弄斧了
      

  3.   

    SetViewportOrg和 SetWindowOrg都是基于物理设备坐标原点来设置视囗或窗囗的原点,只是SetViewportOrg使用的是设备单位,而SetWindowOrg使用的是逻辑单位;不论视囗和窗囗原点如何设置物理设备原点是固定不变的,并且窗囗原点最终会映设到视囗原点;
    窗囗映射到视囗其实就是将窗囗坐标转为视囗坐标,其转换过程可用窗囗转视囗的公式表示;  简单点就是原点设到什么位置,它就在什么位置。这个两个 函数一个设置窗囗原点,一个设置视囗原点,,设置之后,窗囗和视囗的原点就不在一起了,只是在映射时总是将窗囗原点映射到视囗原点而已。 映射时要通过公式进行一些运算,,并不是简单的将窗囗原点挪到视囗原点。。其公式如下:
    xdevice=(xpage-窗口原点x) * 视口范围x / 窗口范围x+视口原点x;
    ydevice=(ypage-窗口原点y) * 视口范围y / 窗口范围y+视口原点y;
    通常说的设备坐标指的就是视囗坐标,,逻辑坐标指的就是窗囗坐标。物理设备坐标就是永远不会被移动的那个设备坐标;
      

  4.   

    SetWindowOrgEx (hdc, cxDib / 2, cyDib / 2, NULL) ;
    是设置窗口的起始位置,也就是将窗口的起始位置调整到图片的中央去
    SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL) ;
    是设置视口的其实位置,也就是将视口的起始位置调整到客户区的中央去
      

  5.   

    SetViewportOrgEx()函数是客户区不动,原点坐标移动。
    SetWindowsOrgEx()函数是原点坐标不动,客户区移动。
    实在不懂,我这里有代码,可以演示给你看
      

  6.   

    http://blog.csdn.net/xizero00/article/details/7442005
    这个是刚写的关于他们的区别