关于SetWindowOrgEx、SetViewportOrgEx、SetViewportExtEx 和SetWindowExtEx 详解 .

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

关于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);

效果图为:

 

 

也浅谈Win API函数SetWindowOrgExSetViewportOrgEx       在阅读学习Charles Petzold大牛名作《Programming Windows,5th Edition》过程中,对于第5章中讲解的SetWindowOrgExSetViewportOrgEx一直不明不白,文中所说的坐标系的移动之类更是弄得我一头雾水。阅读完该章节后,想想似乎只是明白了一点,再想想似乎只是更加糊涂一点。        在MM_TEXT映射模式下,假设cxClientcyClient分别为客户区x轴y轴的长度。        使用以下参数调用SetViewportOr 阅读详情

相关推荐

SetBkMode、SetMapMode、SetWindowExt、SetViewportExt使用

1、SetBkMode原型声明: WINGDIAPI int WINAPI SetBkMode(_In_ HDC hdc, _In_ int mode) 设置背景模式,mode取值:OPAQUE(不透明),TRANSPARENT(透明) 2、SetMapMode原型声明: WINGDIAPI int WINAPI SetMapMode(_In_ HDC hdc, _In_ int iM...

老狼的专栏 1650

关于SetWindowOrgExSetViewportOrgExSetViewportExtEx SetWindowExtEx 详解

关于SetWindowOrgExSetViewportOrgExSetViewportExtEx SetWindowExtEx 详解   1、  SetWindowOrgEx是设置窗口的原点坐标。   例如:          Ellipse(hdc,-100,-100,100,100);          MoveToEx(hdc,-200,0,NULL

u012513234的专栏 1322

SetWindowOrgExSetViewPortOrgEx的区别示例详解

SetWindowOrgExSetViewPortOrgEx的区别示例 详解在: http://blog.csdn.net/xizero00/article/details/7442005

SetWindowOrgExSetViewportOrgEX区分 SetWindowExtExSetViewPortExtEX区别

SetWindowOrgExSetViewportOrgEX都是移动坐标原点。不同在于一个是移动窗口左边一个是逻辑坐标系。 使用这四个函数之前要设置映射模式SetMapMode函数下面的连接为他的使用方法。https://blog.csdn.net/charlessimonyi/article/details/8264572 Ellipse(hdc, -200, -200, 200, 200...

weixin_40317531的博客 473

【转载】关于SetWindowOrgExSetViewportOrgExSetViewportExtEx SetWindowExtEx 详解

关于SetWindowOrgExSetViewportOrgExSetViewportExtEx SetWindowExtEx 详解 1、 SetWindowOrgEx是设置窗口的原点坐标。 例如: Ellipse(hdc,-100,-100,100,100); MoveToEx(hdc,-200,0,NULL); ...

weixin_30770783的博客 218

Windows 程序设计 SetWindowExtEx SetViewportExtEx SetWindowOrgEx SetViewportOrgEx

SetWindowExtEx (hdc, cxDib, cyDib, NULL) ;  表示设置窗口范围           SetViewportExtEx (hdc, cxClient, cyClient, NULL) ; 设置视口范围            SetWindowOrgEx (hdc, cxDib / 2, cyDib / 2, NULL) ; 设置窗口坐标原点

软件开发 1337

SetWindowExtEx函数、SetViewportExtEx函数SetWindowOrgEx函数

SetWindowExtEx 函数功能描述:完成对窗口区域的定义。 函数原型:BOOL SetWindowExtEx(HDC hdc,int nHeight,int nWidth,LPSIZE lpSize) 参数: hdc 设备描述表句柄 nHeight 以逻辑单位表示的新窗口区域的高度 nWidth 以逻辑单位表示的新窗口区域的宽度 lpSize 保存函数调用前窗口区域尺寸的SI

hongke457546235 910

GDI 映像方式 之 SetViewportExtExSetWindowExtEx 解析

所谓视口代表设备,比如屏幕。 窗口代表我们的思维。 我们对windows说在(5,6)处画个点(调用GDI函数)。windows认为是在我们的思维的(5,6)处画了个点。(也就是说5,6是逻辑坐标,GDI函数中的大部分都是逻辑坐标) 那么,要把它映射到屏幕上,必须作一些解释。 解释包括: 原点在哪里? 5,6代表什么? 注意,解释5,6时不光是距离问题,还有方向呢! SetViewportOrgExSetWindowOrgEx是管第一个问题的。设置原点设置X轴Y轴方向(SetMapMode)。 &

博客 457

Programming Windows (四)_ SetViewportOrgEx() 与 SetWindowportOrgEx()

SetWindowOrgEx这个Window是看不见的,可以假想有这么一个Window,提供GDI画图函数以逻辑坐标来画图,这个坐标系也叫page space坐标系,有自定义原点与单位长度(逻辑单位,如0.1mm,从而可以与设备无关)SetViewportOrgEx物理设备坐标总是以左为原点,以像素为单位,x向右,y向下viewport与之区别是

scoollau的专栏 765

逻辑单位与设备坐标(转)

CDC::SetMapMode  virtual int SetMapMode( int nMapMode );函数功能描述:该函数设置指定设备环境的映射方式,映射方式定义了将逻辑单位转换为设备单位的度量单位,并定义了设备的X、Y轴的方向。nMapMode:指定新的映射方式,此参数可以是下面列出的任何一个值。   MM_ANISOTROPIC:逻辑单位转换成具有任意比例轴的任意单位

cg_csu的专栏 2974

关于SetWindowOrgEx、SetViewportO…

关于SetWindowOrgExSetViewportOrgExSetViewportExtExSetWindowExtEx详解 1、SetWindowOrgEx是设置窗口的原点坐标。 例如: Ellipse(hdc,-100,-100,100,100); MoveToEx(hdc,-200,0,NULL); ...

weixin_30822451的博客 116

GID映射模式MM_ISOTROPIC:SetMapMode();SetWindowOrgEx();SetViewportOrgEx();

把5.5读了近十几遍,朦胧理解GDI映射模式的概念记录一下这里. 映射:

CooIsir的专栏 1467

理解SetWindowExtEx

SetWindowOrgEx这个window是看不见的,可以假想有这么一个window,提供GDI画图函数以逻辑坐标来画图,这个坐标系也叫page space坐标系,有自定义原点与单位长度(逻辑单位,如0.1mm,从而可以与设备无关)SetWindowOrgEx这个window是看不见的,可以假想有这么一个window,提供GDI画图函数以逻辑坐标来画图,这个坐标系也叫page space坐标系,有自定义原点与单位长度(逻辑单位,如0.1mm,从而可以与设备无关)SetViewportOrgEx物理设备坐标

江南de烟雨的专栏 1232

【转载】GDI 映像方式 之 SetViewportExtExSetWindowExtEx 解析

所谓视口代表设备,比如屏幕。 窗口代表我们的思维。 我们对windows说在(5,6)处画个点(调用GDI函数)。windows认为是在我们的思维的(5,6)处画了个点。(也就是说5,6是逻辑坐标,GDI函数中的大部分都是逻辑坐标) 那么,要把它映射到屏幕上,必须作一些解释。 解释包括: 原点在哪里? 5,6代表什么? 注意,解释5,6时不光是距离问题,还有方向呢! SetViewp...

weixin_30807779的博客 155
上一篇: 孙鑫视频VC++深入详解学习笔记
下一篇: java 判断中文字符串长度
redennc
博客等级 码龄14年 3粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值