关于SetWindowOrgEx、SetViewportOrgEx、SetViewportExtEx 和SetWindowExtEx 详解
2015-05-05 22:15
435 查看
关于SetWindowOrgEx、SetViewportOrgEx、SetViewportExtEx 和SetWindowExtEx 详解
规律:
1. SetWindowOrgEx、SetViewportOrgEx的作用是 实现原点映射。
2. SetViewportExtEx 和SetWindowExtEx 的作用是 实现比例映射。
3.设备坐标系的原点(0,0)始终在左上角,这个是不变的。设备坐标值(0,0)就在 那里,不管你怎么折腾。
4.函数SetWindowOrgEx 指明了哪个逻辑坐标值和设备坐标值(0,0)映射。
MSDN:The SetWindowOrgEx function specifies which window point maps to the viewport origin (0,0).
SetWindowOrgEx(hdc,Logx,Logy,NULL) 实现了
逻辑坐标(Logx,Logy) ←------------------→ 设备坐标(0,0)
5 函数SetViewPortOrgEx 指明了哪个设备坐标值和逻辑坐标值(0,0)映射。
MSDN:The SetViewportOrgEx function specifies which device point maps to the window origin (0,0).
SetViewPortOrgEx (hdc,Devx,Devy,NULL) 实现了
逻辑坐标(0,0) ←------------------→ 设备坐标(Devx,Devy)
6 SetViewportExtEx 和SetWindowExtEx 是设置映射比例的。
A:只有在MM_ISOTROPIC和MM_ANISOTROPIC模式下才有作用。
B:下面几种模式已经有默认的映射比例,2个函数是无效的。
When the following mapping modes are set, calls to the
SetWindowExtEx and SetViewportExtEx functions are ignored.
MM_HIENGLISH MM_HIMETRIC MM_LOENGLISH MM_LOMETRIC MM_TEXT MM_TWIPS
C: 当模式为MM_ISOTROPIC 的时候,程序必须在调用SetViewportExtEx之前 调用 函数SetWindowExtEx
When MM_ISOTROPIC mode is set, an application must call the
SetWindowExtEx function before it calls SetViewportExtEx
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);
效果图为:
规律:
1. SetWindowOrgEx、SetViewportOrgEx的作用是 实现原点映射。
2. SetViewportExtEx 和SetWindowExtEx 的作用是 实现比例映射。
3.设备坐标系的原点(0,0)始终在左上角,这个是不变的。设备坐标值(0,0)就在 那里,不管你怎么折腾。
4.函数SetWindowOrgEx 指明了哪个逻辑坐标值和设备坐标值(0,0)映射。
MSDN:The SetWindowOrgEx function specifies which window point maps to the viewport origin (0,0).
SetWindowOrgEx(hdc,Logx,Logy,NULL) 实现了
逻辑坐标(Logx,Logy) ←------------------→ 设备坐标(0,0)
5 函数SetViewPortOrgEx 指明了哪个设备坐标值和逻辑坐标值(0,0)映射。
MSDN:The SetViewportOrgEx function specifies which device point maps to the window origin (0,0).
SetViewPortOrgEx (hdc,Devx,Devy,NULL) 实现了
逻辑坐标(0,0) ←------------------→ 设备坐标(Devx,Devy)
6 SetViewportExtEx 和SetWindowExtEx 是设置映射比例的。
A:只有在MM_ISOTROPIC和MM_ANISOTROPIC模式下才有作用。
B:下面几种模式已经有默认的映射比例,2个函数是无效的。
When the following mapping modes are set, calls to the
SetWindowExtEx and SetViewportExtEx functions are ignored.
MM_HIENGLISH MM_HIMETRIC MM_LOENGLISH MM_LOMETRIC MM_TEXT MM_TWIPS
C: 当模式为MM_ISOTROPIC 的时候,程序必须在调用SetViewportExtEx之前 调用 函数SetWindowExtEx
When MM_ISOTROPIC mode is set, an application must call the
SetWindowExtEx function before it calls SetViewportExtEx
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);
效果图为:
相关文章推荐
- 关于SetWindowOrgEx、SetViewportOrgEx、SetViewportExtEx 和SetWindowExtEx 详解 .
- 【转载】关于SetWindowOrgEx、SetViewportOrgEx、SetViewportExtEx 和SetWindowExtEx 详解
- 关于SetWindowOrgEx、SetViewportOrgEx、SetViewportExtEx 和SetWindowExtEx 详解
- 关于SetWindowOrgEx、SetViewportOrgEx、SetViewportExtEx 和SetWindowExtEx 详解
- windows编程中关于设置映象模式的四个函数SetWindowOrg SetViewPortOrg SetMapMode SetWindowExtEx SetViewPortExtEx
- Windows 程序设计 SetWindowExtEx SetViewportExtEx SetWindowOrgEx SetViewportOrgEx
- windows编程中关于设置映象模式的四个函数SetWindowOrg SetViewPortOrg SetMapMode SetWindowExtEx SetViewPortExtEx .
- 关于MM_ANISOTROPIC映射模式, 利用SetWindowExtEx和SetViewportExtEx函数设置Y轴方向的问题
- 关于SetWindowOrgEx和SetViewPortOrgEx之区别
- 关于SetWindowOrgEx与SetViewportOrgEx的用法
- 【转载】GDI 映像方式 之 SetViewportExtEx 与 SetWindowExtEx 解析
- SetWindowExtEx 和SetViewportExtEx 的解释
- SetWindowExtEx()与SetViewportExtEx()
- 特别篇-GDI映射模式SetWindowOrgEx,SetViewportOrgEx
- 特别篇-SetWindowExtEx,SetViewportExtEx解析
- GDI 映像方式 之 SetViewportExtEx 与 SetWindowExtEx 解析
- GDI 映像方式 之 SetViewportExtEx 与 SetWindowExtEx 解析
- 转 关于SetViewPortOrgEx与SetWindowOrgEx
- 放大缩小,只需要使用这2个函数:SetWindowExtEx、SetViewportExtEx
- 对SetWindowExtEx、SetViewportExtEx调用的理解