关于SetWindowOrgEx、SetViewportOrgEx、SetViewportExtEx 和SetWindowExtEx 详解

1、  SetWindowOrgEx是设置窗口的原点坐标。

例如:

Ellipse(hdc,-100,-100,100,100);

MoveToEx(hdc,-200,0,NULL);

LineTo(hdc,200,0);

MoveToEx(hdc,0,-200,NULL);

LineTo(hdc,0,200);

MoveToEx(hdc,0,0,NULL);

LineTo(hdc,100,100);

运行程序的效果为:

修一下程序为:

SetWindowOrgEx(hdc,-100,-100,NULL);

Ellipse(hdc,-100,-100,100,100);

MoveToEx(hdc,-200,0,NULL);

LineTo(hdc,200,0);

MoveToEx(hdc,0,-200,NULL);

LineTo(hdc,0,200);

MoveToEx(hdc,0,0,NULL);

LineTo(hdc,100,100);

运行效果为:

得出结论:SetWindowOrgEx是设置窗口原点坐标的大小

2、  SetViewportOrgEx设置视口原点坐标。

我们将上面程序再次修改一下:

SetViewportOrgEx (hdc,100,100,NULL);

Ellipse(hdc,-100,-100,100,100);

MoveToEx(hdc,-200,0,NULL);

LineTo(hdc,200,0);

MoveToEx(hdc,0,-200,NULL);

LineTo(hdc,0,200);

MoveToEx(hdc,0,0,NULL);

LineTo(hdc,100,100);

效果很上面的一样:

得出结论:SetViewPortOrgEx是设视口原点坐标的大小,也就是客户区的原点大小。在默认的情况下,客户区的原点为左上角坐标为(0,0)。调用SetViewportOrgEx (hdc,100,100,NULL)就把客户的原点坐标设置为(100,100),那么原来客户区的左上角的坐标就变为了(-100,-100)(在映射模式为MM_TEXT时)。

3、 SetWindowExtEx,  用于设置逻辑坐标范围。

SetViewPortExtEx, 用于设置设备坐标范围。

注意:1、上面的两个函数的调用,只有在映射模式为MM_ANISOTROPIC 和MM_ISOROPIC下才有作用,在其他的模式下将被忽略。

2、             必须在调用SetViewPortExtEx之前调用SetWindowExtEx,以便最有效地使用显示区域中的空间。

修改上面的代码:

SetMapMode(hdc,MM_ANISOTROPIC);

SetWindowExtEx(hdc,200,200,NULL);//将窗口的逻辑坐标X轴0 到200,Y轴设置为0 到200

//将视口原点设置为客户区的中心点上

SetViewportOrgEx(hdc,rectClient.right / 2,rectClient.bottom / 2,NULL);

//将窗口的设备坐标X轴 0 到 rectClient.right,Y轴0 到 rectClient.bottom

SetViewportExtEx(hdc,rectClient.right,rectClient.bottom,NULL);

Ellipse(hdc,-100,-100,100,100);

MoveToEx(hdc,-200,0,NULL);

LineTo(hdc,200,0);

MoveToEx(hdc,0,-200,NULL);

LineTo(hdc,0,200);

MoveToEx(hdc,0,0,NULL);

LineTo(hdc,100,100);

效果图为:

原文地址:http://blog.csdn.net/lanyzh0909/article/details/6107814

 

【转载】关于SetWindowOrgEx、SetViewportOrgEx、SetViewportExtEx 和SetWindowExtEx 详解的更多相关文章

  1. 【转载】C/C++中extern关键字详解

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

  2. (转载)完成端口(Completion Port, I/OCP)详解

    http://www.cnblogs.com/lancidie/archive/2011/12/19/2293773.html 手把手叫你玩转网络编程系列之三    完成端口(Completion P ...

  3. 【转载】C# 中的委托和事件(详解:简单易懂的讲解)

    本文转载自http://www.cnblogs.com/SkySoot/archive/2012/04/05/2433639.html C# 中的委托和事件(详解) C# 中的委托和事件 委托和事件在 ...

  4. 转载 JS组件Bootstrap Select2使用方法详解

    JS组件Bootstrap Select2使用方法详解 作者:懒得安分 字体:[增加 减小] 类型:转载 时间:2016-01-26我要评论 这篇文章主要为大家介绍了JS组件Bootstrap Sel ...

  5. 【转载】BootStrap表格组件bootstrap table详解

    (转载,来源“脚本之家”,作者不详) 一.Bootstrap Table的引入 关于Bootstrap Table的引入,一般来说还是两种方法: 1.直接下载源码,添加到项目里面来.由于Bootstr ...

  6. [转载]OpenSSL中文手册之命令行详解(未完待续)

     声明:OpenSSL之命令行详解是根据卢队长发布在https://blog.csdn.net/as3luyuan123/article/details/16105475的系列文章整理修改而成,我自己 ...

  7. 【转载】Android应用AsyncTask处理机制详解及源码分析

    [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重分享成果] 1 背景 Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个 ...

  8. [转载]JavaEE学习篇之——JQuery技术详解

    原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/32102187 1.简介2.工具3.jQuery对象 1.DOM对象转化成j ...

  9. 转载 《AngularJS》5个实例详解Directive(指令)机制

    <AngularJS>5个实例详解Directive(指令)机制 大漠穷秋 本文整理并扩展了<AngularJS>这本书第六章里面的内容,此书近期即将由电子工业出版社出版,敬请 ...

随机推荐

  1. UI篇—懒加载

    1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化 ...

  2. webservice整合spring cxf

    下载cxf包,把他里面的包都添加进lib文件夹中. 创建一个接口.添加@WebService注解 @WebService public interface HelloWorld { String sa ...

  3. Pots(BFS)

    Pots Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total Submiss ...

  4. 封装一个Ajax工具函数

    /*封装一个ajax工具函数*/ window.$ = {}; /*通过$定义一个ajax函数*/ /* * 1. type   string   请求的方式  默认是get * 2. url     ...

  5. 线程池Executors探究

    线程池用到的类在java.util.concurrent包下,核心类是Executors,通过其不同的几个方法可产生不同的线程池. 1.生成固定大小的线程池 public static Executo ...

  6. 《Windows驱动开发技术详解》之编程加载NT式驱动

    之前我们加载驱动都是利用INSTDRV这个应用,其原理是在注册表中写入相应的字段,这一节我们手动编写代码去加载驱动,其原理类似:

  7. 《剑指Offer》算法题——“旋转数组”的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减序列的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数 ...

  8. MFC中实现定时执行与提醒功能(自编代码)

    具体实现代码如下:添加一个计时器:SetTimer(1,1000,NULL); 下面仅列举核心代码,详细步聚不作说明,效果如下所示: void CShowTimer::OnTimer(UINT_PTR ...

  9. Chapter 2 Open Book——1

    The next day was better… and worse. 明天会更好也会更坏. It was better because it wasn't raining yet, though t ...

  10. Javascript和HTML dom

    今天在看DOM那一章的时候突然想到一个问题,众所周知的js的数据类型有两种:原始类型和对象类型.其中原始类型又包括以下几种类型:数字型.字符串型.布尔值.null和undefined.其中对象类型包括 ...