映射的问题
SetMapMode(hdc,MM_ANISOTROPIC);
SetWindowExtEx(hdc,30,20,NULL);
SetViewportExtEx(hdc,300,200,NULL);
SetViewportOrgEx(hdc,300,150,NULL);
这几句程序到底是什么意思,我运行出来的窗口到底是窗口还是视口、(30,20)和(300,200)到底是什么关系,还有是口的原点设置好后我画LintTo(hdc,200,400),这个坐标是相对与(300,150)的原点的吗,还是相对与窗口的左上角????
问题点数:20、回复次数:5Top
1 楼jronald(深白色)回复于 2005-04-03 17:02:48 得分 3
http://blog.csdn.net/jronald/archive/2005/01/03/238111.aspxTop
2 楼jronald(深白色)回复于 2005-04-03 17:04:08 得分 0
msdn上说得更详细Top
3 楼surstar(我要写个操作系统出来……)回复于 2005-04-03 17:05:42 得分 9
1.SetMapMode(hdc,MM_ANISOTROPIC);->设置MOEDE 为ANISOTROPIC
2.SetWindowExtEx(hdc,30,20,NULL);->窗口范围
3.SetViewportExtEx(hdc,300,200,NULL);->视口范围
4.(30,20)和(300,200)到底是什么关系->用来求窗口和视口的比例的
5.还有是口的原点设置好后我画LintTo(hdc,200,400),这个坐标是相对与(300,150)的原点的吗
--
SetViewportOrgEx(hdc,300,150,NULL);//表示把视口300,150映射为窗口的0,0
1. 要理解上面的,要先理解什么是窗口,什么是视口
窗口是针对逻辑坐标,视口是针对设备坐标(很容易混淆,怎么记?视口,显示器嘛,显示器,是设备嘛)
2. 大多数的GUI函数,即CDC类的成员,都是用的逻辑坐标做参数
LintTo(hdc,200,400),本来是指是在逻辑的200,和400地方,
由于"表示把视口(设备坐标)300,150映射为窗口(逻辑)的0,0"
但是实际上最后出现在视口上是相当于 右上移动了
http://blog.csdn.net/surstar/archive/2005/03/20/324615.aspxTop
4 楼jronald(深白色)回复于 2005-04-03 17:15:35 得分 0
to 楼上:viewport的坐标系与显示器的坐标系有区别,viewport的原点可以变,显示器的原点就是左上角Top
5 楼Mackz(在相互)回复于 2005-04-03 17:51:16 得分 8
我运行出来的窗口到底是窗口还是视口
视口。
(30,20)和(300,200)到底是什么关系
按照(30, 20)的区域绘制,显示在(300, 200)大小的范围。知道了吗?坐标转换,在这里坐标放大了。
还有是口的原点设置好后我画LintTo(hdc,200,400),这个坐标是相对与(300,150)的原点的吗,还是相对与窗口的左上角????相对于窗口,至于是左上角还是左下角还是别的地方,你这里没有SetWindowOrgEx(),默认窗口原点在(0,0)。具体要根据窗口的范围(在MM_ANISOTROPIC和MM_ISOTROPIC模式下,高度或者宽度可以为负值,表示方向与默认相反)、原点与视口的范围、原点来计算。Top




