是windows程序设计里的一个时钟程序。
SetMapMode (hdc, MM_ISOTROPIC) ;
SetWindowExtEx (hdc, 276, 72, NULL) ;//设置窗口范围,x为276个逻辑单位,y为72个逻辑单位。
SetViewportExtEx (hdc, cxClient, cyClient, NULL) ;//设置视口范围,每个X逻辑单位为(cxclient/276)个像素点,每个Y逻辑单位为(cyClient/72)个像素点。
SetWindowOrgEx (hdc, 138, 36, NULL) ;//将逻辑点138, 36映射到设备点0,0. 设备点0,0永远在左上角。
SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL) ;//将逻辑点(0,0)映射到设备点cxClient / 2, cyClient / 2
//两个设置原点函数的后果就是当输入逻辑坐标138则是X轴的最左边,当输入逻辑坐标0则是X轴的中间,当输入-138时则是X轴的最右边。
//同样,36则是y轴最上面,0是中间,-36是最下面。
首先是想问的是设置原点函数的理解对不对?如果对的话,那么第一个六角多边形为什么在最左上的,其坐标为7, 6, 11, 2, 31, 2, 35, 6, 31, 10, 11, 10, (就是小时的十位数的最顶端的那个多边形?)按照我的理解7应该是在客户区最中心偏左一点点的位置啊。怎么好像又是从左边过来的?如果我的理解是错的,麻烦教下。
第二个问题是MM_ISOTROPIC这个模式到底是个什么鸟东西,配合两个范围设置函数,把我搞的郁闷死了。
书上说这个模式是把X轴和Y轴的逻辑单位表示相同的物理距离。但两个范围设置函数,SetWindowExtEx (hdc, 276, 72, NULL)首先设置窗口范围为X276个逻辑单位,Y72个逻辑单位。然后又用SetViewportExtEx (hdc, cxClient, cyClient, NULL)设置视口范围,那搞成什么了?我完全理解不了了!!!跪求高手。
MM_ISOTROPIC映射模式问题。
答案:2 悬赏:80
解决时间 2021-03-05 19:34
- 提问者网友:依靠
- 2021-03-05 07:54
最佳答案
- 二级知识专家网友:傲娇菇凉
- 2021-03-05 09:05
不管怎么理解,都要用这2公式计算:
xViewport = (xWindow - xWinOrg)* xViewExt / xWinExt + xViewOrg
yViewport = (yWindow - yWinOrg)* yViewExt / yWinExt + yViewOrg
不算比例的话比较容易看,原点的设置就是把SetWindowOrg设置的逻辑原点影射到SetViewportOrg设置的设备原点:
xViewport = (xWindow - xWinOrg)+ xViewOrg
yViewport = (yWindow - yWinOrg)+ yViewOrg
如果没有改变设备或逻辑原点的话,肯定用的默认值0,0
MM_ISOTROPIC是一种“半约束”的映射方式,比如一个正方形,如果x和y改变的比例不一样,映射后就不是正方形而是长方形了,MM_ISOTROPIC的话,就算你使用不同的比例,系统也会调整,使得x和y方向代表的距离一样,也就是比例相同,这样正方形还是正方形,圆也不会因为不小心而变成椭圆,而MM_ANISOTROPIC你可以任意改变,系统不会调整这些值
xViewport = (xWindow - xWinOrg)* xViewExt / xWinExt + xViewOrg
yViewport = (yWindow - yWinOrg)* yViewExt / yWinExt + yViewOrg
不算比例的话比较容易看,原点的设置就是把SetWindowOrg设置的逻辑原点影射到SetViewportOrg设置的设备原点:
xViewport = (xWindow - xWinOrg)+ xViewOrg
yViewport = (yWindow - yWinOrg)+ yViewOrg
如果没有改变设备或逻辑原点的话,肯定用的默认值0,0
MM_ISOTROPIC是一种“半约束”的映射方式,比如一个正方形,如果x和y改变的比例不一样,映射后就不是正方形而是长方形了,MM_ISOTROPIC的话,就算你使用不同的比例,系统也会调整,使得x和y方向代表的距离一样,也就是比例相同,这样正方形还是正方形,圆也不会因为不小心而变成椭圆,而MM_ANISOTROPIC你可以任意改变,系统不会调整这些值
全部回答
- 1楼网友:厭世為王
- 2021-03-05 09:56
我。。知。。道
加。。我。。私。。聊
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯